[问题] 请教有关类别型态的阵列问题

楼主: 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