作者newjoy (職業格鬥家)
看板java
標題[問題] pass-by-value的問題
時間Sat Oct 30 18:09:10 2010
public class test {
private int index = 0;
public test()
{
this.index = 0;
}
public void setIndex(int index)
{
this.index = index;
}
public int getIndex()
{
return this.index;
}
public static void assignT(test t)
{
t = new test();
}
public static void main(String[] args){
test t1 = new test();
t1.setIndex(9);
assignT(t1);
System.out.println("value : "+t1.getIndex());
}
}
如果傳入function 裡面的是 object的 reference,
那為什麼執行assignT之後
印出來的值一樣是9而不是0??
假設 t1 的位址是 0xAA
那傳進 assignT 裡的 t 會是copy的一份 0xAA的 object 位址
然後 t = new test(); 會把0xAA的內容指向一個新的 test實體,
這樣理解有錯嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.248.140
→ darkk6:t1 指向的 test instance 值還是 9 沒錯啊 10/30 18:16
※ 編輯: newjoy 來自: 220.135.248.140 (10/30 18:20)
→ idlejustin:t = new test(); 不是把0xAA的內容重指 10/30 19:24
→ idlejustin:assignT 裡的 t 也不是 copy 的一份 0xAA 的 object 10/30 19:25
→ idlejustin:位址 t 是一個新的 referenece 變數 10/30 19:32
→ james732:我想問一下,如果要讓main裡的t1真的換掉的話,要怎麼改? 10/30 20:39
→ james732:在C裡面可以用雙重指標**來做到,Java該怎麼寫呢? 10/30 20:41
→ wendly777:將test包到另外一個object,或傳test [],基本上array就 10/30 21:07
→ wendly777:是另外一個object了,應該是沒其他方法了吧? 10/30 21:10
→ meconin:把 t1 宣告給 class ... 不要給 main 11/05 11:45
→ meconin:不過這跟包給另一個 object 是一樣的意思 11/05 11:53