java 傳值與傳引用

public class Test {  

String str = "goods";
public void change(String str2){
str2="goods";
}
public static void main(String args[]){  
Test t = new Test();
String str2 = "aaaa";
t.change(str2);
System.out.println(str2);
    } 


輸出結果:

aaaa

並不是:

goods


change 中傳的str2是變量str2的一個地址副本,並沒有修改String str2的值,change函數中修改的只是副本地址的值,而非地址所指向的具體值

public class Test {  

String str = "goods";
public void change(DataObj dob){
dob.setName("goods");
}
public static void main(String args[]){  
Test t = new Test();

                DataObj dob = new DataObj();

                dob.setName("aaaa");
t.change(dob);
System.out.println(dob.getName());
    } 


class DataObj{
private String name;
private double value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
}

輸出結果:goods

goods

並不是:aaaa

在change函數中傳入的值爲dob地址副本,在change函數中修改了dob地址所指向對象的成員變量值,所以再次調用dob地址指向的對象則成員變量name值被改變

如果將change函數改爲

public void change(DataObj dob){
dob=null;
}

輸出結果:goods

因爲change函數修改的是dob地址的副本的值,並沒有修改dob地址所指向的對象成員變量,所以輸出值爲goods

發佈了20 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章