作者laughingman (笑面男)
看板java
标题[问题] 请教有关类别型态的阵列问题
时间Wed Jan 7 01:30:55 2015
小弟最近自修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://webptt.com/cn.aspx?n=bbs/java/M.1420565463.A.21E.html
1F:→ lucky1lk: 我不懂"对於Integer的认知错误" 跟你print a到底有何 01/07 11:10
2F:→ lucky1lk: 关联 01/07 11:10
3F:→ ssccg: Integer是immutable,b[0] = 10是b[0] = new Integer(10) 01/07 11:50
4F:→ ssccg: 是说就算是其他物件,用 b[0] = xxx 也只是换掉b中的参考 01/07 11:56
5F:→ ssccg: 至少该用b[0].x = x或b[0].setX(x) 吧 01/07 11:56
6F:→ ssccg: 虽然Integer显然没有这些方法所以你就用了 = 01/07 11:56
7F:→ ssccg: 但想一下就知道 = 并不能试出你期待的copy方式差别 01/07 11:57
8F:→ laughingman: 感谢楼上解惑,小弟了解了,原来是因为Integer是 01/07 19:24
9F:→ laughingman: immutable,b[0]=10会创造出新物件,对原来的物件没 01/07 19:25
10F:→ laughingman: 有影响。再次感谢。 01/07 19:26