分析以下代码:
class Test { public static void main(String[] args) { int[] x = {1, 2, 3, 4}; int[] y = x; x = new int[2]; for (int i = 0; i < y.length; i++) { System.out.print(y[i] + " "); } } }
A.程序显示1 2 3 4
B.程序显示0 0
C.程序显示0 0 3 4
D.程序显示0 0 0 0
以下代码的答案是A.但为什么答案不是B?
我们假设{1, 2, 3, 4}
有内存地址M
.
当分配x
到{1, 2, 3, 4}
,你要分配的内存地址的引用{1, 2, 3, 4}
,即x
会指出来M
.
在分配时y = x
,y
将参考M
.
在那之后,你正在改变x
指向的参考,让我们说它是N
.
因此,在打印时,y
指向M
(这是地址{1, 2, 3, 4}
),但x
保持对N
(即new int[2]
)的引用.这就是差异.