[問題] 一個再基礎也不過的OO觀念

看板java作者 (mm)時間14年前 (2009/12/02 13:51), 編輯推噓6(6014)
留言20則, 11人參與, 最新討論串1/2 (看更多)
今天寫程式遇到一個我百思不得其解的觀念問題 就我的認知, 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

12/02 13:55, , 1F
Reference 只是一個被包裝起來,比較安全的指標
12/02 13:55, 1F

12/02 13:59, , 2F
是指標沒錯啊,呵呵... 只是不能當 address 運算
12/02 13:59, 2F

12/02 13:59, , 3F
a2 = a1, 會使得參考到同樣的位置.
12/02 13:59, 3F

12/02 14:02, , 4F
a2 = a1, 拿掉就會像你說的那樣了.
12/02 14:02, 4F

12/02 14:08, , 5F
還是不懂耶...在Java中a2複製a1的值不是嗎
12/02 14:08, 5F

12/02 14:11, , 6F
怎麼會變成address reference...
12/02 14:11, 6F

12/02 14:13, , 7F
a2是new出來的...有自已的獨立Mem Space與address才對
12/02 14:13, 7F
※ 編輯: mkopoi 來自: 60.249.163.125 (12/02 14:14)

12/02 14:32, , 8F
如果是因為加了 a2= a1 ,reference到a1的位置了呢?
12/02 14:32, 8F

12/02 14:45, , 9F
A a2; a2=a1;這樣會不會好理解些?這樣你的a2就沒有獨立
12/02 14:45, 9F

12/02 14:48, , 10F
的mem space了。事實上你原來的A a2=new A()在a2=a1後,
12/02 14:48, 10F

12/02 14:49, , 11F
因為沒有被引用,mem space就會被自動回收了
12/02 14:49, 11F

12/02 15:02, , 12F
你想說的話應該是 a2 = a1.clone(); 才對
12/02 15:02, 12F

12/02 15:03, , 13F
和 OO 一點關係都沒有..... =_=
12/02 15:03, 13F

12/02 15:31, , 14F
請參考拙作 #19T3rtSu (java)
12/02 15:31, 14F

12/03 00:14, , 15F
感謝各位,clone()應該是正解
12/03 00:14, 15F

12/03 00:15, , 16F
回adrianshum大,我對OO的等號理解是我文章第2段
12/03 00:15, 16F

12/03 01:25, , 17F
深層拷貝跟淺層拷貝我好像也不太常用...
12/03 01:25, 17F

12/03 08:22, , 18F
^^ 我把java的物件理解成所有物件都是指標~
12/03 08:22, 18F

12/03 10:58, , 19F
mkopoi: 等號 和 OO 還是一點關係都沒有
12/03 10:58, 19F

12/03 13:47, , 20F
推a大,好像問題跟OO沒關係...
12/03 13:47, 20F
文章代碼(AID): #1B5W1m9W (java)
文章代碼(AID): #1B5W1m9W (java)