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

作者: laughingman (笑面男)   2015-01-07 01:30:55
小弟最近自修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的認知錯誤,還是有其他的解釋,
希望各位高手可以指點個方向,替小弟解惑。
感謝各位高手花時間看這篇文章,謝謝。
作者: lucky1lk (賭到沒錢的人)   2015-01-07 11:10:00
我不懂"對於Integer的認知錯誤" 跟你print a到底有何關聯
作者: ssccg (23)   2015-01-07 11:50:00
Integer是immutable,b[0] = 10是b[0] = new Integer(10)是說就算是其他物件,用 b[0] = xxx 也只是換掉b中的參考至少該用b[0].x = x或b[0].setX(x) 吧雖然Integer顯然沒有這些方法所以你就用了 =但想一下就知道 = 並不能試出你期待的copy方式差別
作者: laughingman (笑面男)   2015-01-07 19:24:00
感謝樓上解惑,小弟了解了,原來是因為Integer是immutable,b[0]=10會創造出新物件,對原來的物件沒有影響。再次感謝。

Links booklink

Contact Us: admin [ a t ] ucptt.com