[問題] 請教有關類別型態的陣列問題

看板java作者 (笑面男)時間10年前 (2015/01/07 01:31), 編輯推噓0(0010)
留言10則, 3人參與, 最新討論串1/1
小弟最近自修JAVA時, 看到書上寫說可以用Arrays.copyOf()來實現陣列複製, 在對於複製基本型態時此為深層複製,也就是說彼此的改變不會互相影響, 但對於類別型態的複製就是淺層複製,複製出來的陣列仍會指向原來的物件。 我就照書上的程式範例測試了一下,發現確實如此, 可是當我用在Integer上時,卻變成深層複製了(我本來的理解是Integer是物件, 所以應該是淺層複製),以下是我的測試程式碼: Integer [] a = {1, 2}; Integer [] b = Arrays.copyOf(a, 2); b[0] = 10; for(Integer i:a){ System.out.println(i); } 輸出是: 1 2 不知道是我對於Integer的認知錯誤,還是有其他的解釋, 希望各位高手可以指點個方向,替小弟解惑。 感謝各位高手花時間看這篇文章,謝謝。 -- 如果這個世界有神, 祂必定不賞善罰惡,也沒有任何道德觀, 祂只保證有生必有死,曾經經歷出生的生命,必以死亡做終結。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.70.152.243 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1420565463.A.21E.html

01/07 11:10, , 1F
我不懂"對於Integer的認知錯誤" 跟你print a到底有何
01/07 11:10, 1F

01/07 11:10, , 2F
關聯
01/07 11:10, 2F

01/07 11:50, , 3F
Integer是immutable,b[0] = 10是b[0] = new Integer(10)
01/07 11:50, 3F

01/07 11:56, , 4F
是說就算是其他物件,用 b[0] = xxx 也只是換掉b中的參考
01/07 11:56, 4F

01/07 11:56, , 5F
至少該用b[0].x = x或b[0].setX(x) 吧
01/07 11:56, 5F

01/07 11:56, , 6F
雖然Integer顯然沒有這些方法所以你就用了 =
01/07 11:56, 6F

01/07 11:57, , 7F
但想一下就知道 = 並不能試出你期待的copy方式差別
01/07 11:57, 7F

01/07 19:24, , 8F
感謝樓上解惑,小弟了解了,原來是因為Integer是
01/07 19:24, 8F

01/07 19:25, , 9F
immutable,b[0]=10會創造出新物件,對原來的物件沒
01/07 19:25, 9F

01/07 19:26, , 10F
有影響。再次感謝。
01/07 19:26, 10F
文章代碼(AID): #1Kh1lN8U (java)
文章代碼(AID): #1Kh1lN8U (java)