作者mkopoi (mm)
看板java
標題[問題] 一個再基礎也不過的OO觀念
時間Wed Dec 2 13:51:41 2009
今天寫程式遇到一個我百思不得其解的觀念問題
就我的認知, 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
1F:→ tkcn:Reference 只是一個被包裝起來,比較安全的指標 12/02 13:55
2F:推 godfat:是指標沒錯啊,呵呵... 只是不能當 address 運算 12/02 13:59
3F:→ janyfor:a2 = a1, 會使得參考到同樣的位置. 12/02 13:59
4F:→ janyfor:a2 = a1, 拿掉就會像你說的那樣了. 12/02 14:02
5F:→ mkopoi:還是不懂耶...在Java中a2複製a1的值不是嗎 12/02 14:08
6F:→ mkopoi:怎麼會變成address reference... 12/02 14:11
7F:→ mkopoi:a2是new出來的...有自已的獨立Mem Space與address才對 12/02 14:13
※ 編輯: mkopoi 來自: 60.249.163.125 (12/02 14:14)
8F:推 derekQQ:如果是因為加了 a2= a1 ,reference到a1的位置了呢? 12/02 14:32
9F:→ FirstFan:A a2; a2=a1;這樣會不會好理解些?這樣你的a2就沒有獨立 12/02 14:45
10F:→ FirstFan:的mem space了。事實上你原來的A a2=new A()在a2=a1後, 12/02 14:48
11F:→ FirstFan:因為沒有被引用,mem space就會被自動回收了 12/02 14:49
12F:推 legnaleurc:你想說的話應該是 a2 = a1.clone(); 才對 12/02 15:02
13F:→ adrianshum:和 OO 一點關係都沒有..... =_= 12/02 15:03
15F:→ mkopoi:感謝各位,clone()應該是正解 12/03 00:14
16F:→ mkopoi:回adrianshum大,我對OO的等號理解是我文章第2段 12/03 00:15
17F:推 ogamenewbie:深層拷貝跟淺層拷貝我好像也不太常用... 12/03 01:25
18F:→ jej:^^ 我把java的物件理解成所有物件都是指標~ 12/03 08:22
19F:→ adrianshum:mkopoi: 等號 和 OO 還是一點關係都沒有 12/03 10:58
20F:推 derekQQ:推a大,好像問題跟OO沒關係... 12/03 13:47