看板 java 關於我們 聯絡資訊
今天寫程式遇到一個我百思不得其解的觀念問題 就我的認知, Java中的等號, 是把右邊的值set給左方物件 結果今天遇到一個再基礎也不過的問題,有點顛翻我對OO的認知 以下程式: A a1= new A(); a1.id= "123"; A a2= new A(); a2= a1; (以上兩行寫成A a2= a1也是一樣啦) a2.id= "456"; 結果這時候去查...a1.id竟然是456!不是應該要123嗎? 怎麼搞的好像指標一樣,看起來好像是把a1的address reference給a2 有誰可以指出我觀念上的盲點嗎?感激不盡! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.249.163.125
tkcn:Reference 只是一個被包裝起來,比較安全的指標 12/02 13:55
godfat:是指標沒錯啊,呵呵... 只是不能當 address 運算 12/02 13:59
janyfor:a2 = a1, 會使得參考到同樣的位置. 12/02 13:59
janyfor:a2 = a1, 拿掉就會像你說的那樣了. 12/02 14:02
mkopoi:還是不懂耶...在Java中a2複製a1的值不是嗎 12/02 14:08
mkopoi:怎麼會變成address reference... 12/02 14:11
mkopoi:a2是new出來的...有自已的獨立Mem Space與address才對 12/02 14:13
※ 編輯: mkopoi 來自: 60.249.163.125 (12/02 14:14)
derekQQ:如果是因為加了 a2= a1 ,reference到a1的位置了呢? 12/02 14:32
FirstFan:A a2; a2=a1;這樣會不會好理解些?這樣你的a2就沒有獨立 12/02 14:45
FirstFan:的mem space了。事實上你原來的A a2=new A()在a2=a1後, 12/02 14:48
FirstFan:因為沒有被引用,mem space就會被自動回收了 12/02 14:49
legnaleurc:你想說的話應該是 a2 = a1.clone(); 才對 12/02 15:02
adrianshum:和 OO 一點關係都沒有..... =_= 12/02 15:03
H45:請參考拙作 #19T3rtSu (java) 12/02 15:31
mkopoi:感謝各位,clone()應該是正解 12/03 00:14
mkopoi:回adrianshum大,我對OO的等號理解是我文章第2段 12/03 00:15
ogamenewbie:深層拷貝跟淺層拷貝我好像也不太常用... 12/03 01:25
jej:^^ 我把java的物件理解成所有物件都是指標~ 12/03 08:22
adrianshum:mkopoi: 等號 和 OO 還是一點關係都沒有 12/03 10:58
derekQQ:推a大,好像問題跟OO沒關係... 12/03 13:47