java转net容易吗_每日一醒(1):学习Java容易忽视的小错误,你注意到了吗?
在我們學(xué)習(xí)Java的過(guò)程中有著許多的小知識(shí)點(diǎn)特別容易出bug,你知道嗎?下面我就給大家科普下2個(gè)學(xué)習(xí)Java容易忽視的問(wèn)題
1、值傳遞與引用傳遞
值傳遞是指對(duì)象被值傳遞,意味著傳遞了對(duì)象的一個(gè)副本,即使副本被改變,也不會(huì)影響源對(duì)象。(因?yàn)橹祩鬟f的時(shí)候,實(shí)際上是將實(shí)參的值復(fù)制一份給形參。)
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
swap(num1, num2);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
}
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println("a = " + a);
System.out.println("b = " + b);
}
結(jié)果輸出:a = 20;b = 10;num1 = 10;num2 = 20
而引用傳遞傳遞的并不是實(shí)際的對(duì)象,而是對(duì)象的引用。因此,外部對(duì)引用對(duì)象的改變會(huì)反映到實(shí)際的對(duì)象上。(因?yàn)橐脗鬟f的時(shí)候,實(shí)際上是將實(shí)參的地址值復(fù)制一份給形參。)
public static void main(String[] args) {
int[ ] arr = {1,2,3,4,5};
change(arr);
System.out.println(arr[0]);
}
public static void change(int[] array) {
//將數(shù)組的第一個(gè)元素變?yōu)?
array[0] = 0;
}
//結(jié)果輸出:0
而還有一個(gè)特殊的列子StringBuffer類(lèi)型傳遞
public void method() {
StringBuffer str = new StringBuffer("1234");
System.out.println(str);
change(str);
System.out.println(str);
}
public static void change(StringBuffer str) {
str = new StringBuffer("abc");
//str.append("歡迎大家關(guān)注");//輸出:1234歡迎大家關(guān)注
//str.insert(3, "(編程)");//輸出:123(編程)4
}
結(jié)果:1234;1234。分析:因?yàn)樵?change方法內(nèi)部我們是新建了一個(gè)StringBuffer對(duì)象,所以 str指向了另外一個(gè)地址,相應(yīng)的操作也同樣是指向另外的地址的。如
public class Demo {
public static void main(String[] args) {
Person p = new Person("張三");
change(p);
System.out.println(p.name);
}
public static void change(Person p) {
Person person = new Person("李四");
p = person;
}
}
class Person {
String name;
public Person(String name) {
this.name = name;
}
}
最后輸出:張三;這是因?yàn)閏hange方法中重新創(chuàng)建了一個(gè) Person對(duì)象。這些都是很容易出bug的小知識(shí),你Get到了嗎?如果學(xué)習(xí)Java過(guò)程中有什么問(wèn)題可以評(píng)論留言,我看到都會(huì)回復(fù)哦!
總結(jié)
以上是生活随笔為你收集整理的java转net容易吗_每日一醒(1):学习Java容易忽视的小错误,你注意到了吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小米8与探索版的区别(小米官方售后服务)
- 下一篇: java package报错_Java从