public class Test {
public static void main(String[] args) {
int[] a = new int[] {1, 2, 3, 4, 5};
int[] b = new int[4];
b=a;
for (int x : b)
System.out.print(x);
}
}
b
数组可以包含4个元素,但我将5个a
数组元素插入b中。输出为1,2,3,4,5
。这怎么可能在Java?
答案 0 :(得分:6)
a
和b
是引用变量。初始化后你实际上有这样的事情:
a - > [1,2,3,4,5]
b - > [0,0,0,0]
执行b=a
时,您只需重新分配b
以引用a
引用的数组,并且 初始化的数组是根本不再引用。所以,你现在有:
(a和b) - > [1,2,3,4,5]
答案 1 :(得分:3)
当你做b = a时;你正在覆盖你以前的数组b,这样数组b就成了你的数组,其大小为5。
答案 2 :(得分:1)
通过将new int[4]
分配给b
,您将创建一个长度为4的空int
数组。如果您编写b = a
,则完全处理新创建的数组用数组a
覆盖它,其长度为5,内容为a
。这就是为什么你问题中的输出是12345
。
我猜你要做的就是用数组b
中的值填充数组a
:
for (int i = 0; i < b.length; i++) {
b[i] = a[i];
}
但是你不能将a
的5个值插入到长度为4的数组b
中。
答案 3 :(得分:1)
当你写b = a,b和a成为别名时。 b现在指向一个。 现在,如果您更改了a中的任何内容,它也将在b中更改,反之亦然
请参阅this