package javaapplication8;
public class Main {
public static void main(String[] args) {
int[] list1 = {1, 2, 3,4};
int[] list2 = {5, 6, 7,8};
for (int i = 0; i < list2.length; i++){
System.out.print(list2[i] + " ");
}
System.out.println("");
list2 = list1;
for (int i = 0; i < list2.length; i++){
System.out.print(list2[i] + " ");
}
System.out.println("");
//Change list1
list1[0] = -1;
//Change list2
list2[3] = -4;
//List1 output
for (int i = 0; i < list1.length; i++){
System.out.print(list1[i] + " ");
}
System.out.println("");
//List2 output
for (int i = 0; i < list2.length; i++){
System.out.print(list2[i] + " ");
}
System.out.println("");
//Set list1
list1 = new int[2];
list1[0] = 100;
list1[1] = 99;
//List1 output
for (int i = 0; i < list1.length; i++){
System.out.print(list1[i] + " ");
}
System.out.println("");
//List2 output
for (int i = 0; i < list2.length; i++){
System.out.print(list2[i] + " ");
}
System.out.println("");
}
}
运行:
5 6 7 8
1 2 3 4
-1 2 3 -4
-1 2 3 -4
100 99
-1 2 3 -4
答案 0 :(得分:2)
列表1和列表2在执行List2 = list1;
后指向同一个数组对象这样做List2 [3] = -4;实际上是为List1指向的数组对象做的。
并记住之前与List2相关的数组对象现在代表垃圾收集。
所以早些时候你做了List1 = x和List2 = y,在list1和list2变量指出的内存中有两个数组对象。但是在执行list2 = list1后,你使两个变量都指向x数组而另一个数组现在是免费的,并且java需要在某个时候重新收集这个内存,因此你所做的任何改变都是对象x而不是y
答案 1 :(得分:1)
当您在Java中执行list2 = list1;
时,您实际上并未复制数组,而是复制对该数组的引用。
因此,内存中只有一个数组,list
和list2
都指向该数组。因此,对任何变量进行的任何修改也会影响另一个变量。
如果要创建数组的副本,请查看System.arraycopy
方法。
答案 2 :(得分:0)
Java数组通过引用存储,因此在调用之后
list2 = list1;
两个变量都引用相同的数组。使用list2 = Arrays.copyOf(list1, list1.length)
。