[問題] pass-by-value的問題

看板java作者 (職業格鬥家)時間13年前 (2010/10/30 18:09), 編輯推噓0(0010)
留言10則, 5人參與, 最新討論串1/2 (看更多)
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

10/30 18:16, , 1F
t1 指向的 test instance 值還是 9 沒錯啊
10/30 18:16, 1F
※ 編輯: newjoy 來自: 220.135.248.140 (10/30 18:20)

10/30 19:24, , 2F
t = new test(); 不是把0xAA的內容重指
10/30 19:24, 2F

10/30 19:25, , 3F
assignT 裡的 t 也不是 copy 的一份 0xAA 的 object
10/30 19:25, 3F

10/30 19:32, , 4F
位址 t 是一個新的 referenece 變數
10/30 19:32, 4F

10/30 20:39, , 5F
我想問一下,如果要讓main裡的t1真的換掉的話,要怎麼改?
10/30 20:39, 5F

10/30 20:41, , 6F
在C裡面可以用雙重指標**來做到,Java該怎麼寫呢?
10/30 20:41, 6F

10/30 21:07, , 7F
將test包到另外一個object,或傳test [],基本上array就
10/30 21:07, 7F

10/30 21:10, , 8F
是另外一個object了,應該是沒其他方法了吧?
10/30 21:10, 8F

11/05 11:45, , 9F
把 t1 宣告給 class ... 不要給 main
11/05 11:45, 9F

11/05 11:53, , 10F
不過這跟包給另一個 object 是一樣的意思
11/05 11:53, 10F
文章代碼(AID): #1Co-x9ov (java)
文章代碼(AID): #1Co-x9ov (java)