我想了解array = array
的实际作用。
为什么编辑data1
导致data2
在此过程中稍后被更改?
String[][] data1 = new String[5][1];
String[][] data2 = new String[1][1];
data1[0][0] = "Test 1";
data2 = data1;
//Prints "Test 1"
System.out.println(data2[0][0]);
data1[0][0] = "NEW";
//Prints "NEW"
System.out.println(data2[0][0]);
答案 0 :(得分:1)
data2 = data1;
从第4 行开始,命令data1
从现在开始引用data2
。因此,两个引用都引用同一对象。通过使用参考文献之一进行的任何修改将彼此可见。这就是=
运算符在Java中实际执行的操作。从技术上讲,这就是引用复制。
答案 1 :(得分:1)
在Java中,数组名称实际上包含数组的起始地址(类似于c / c ++)。数组索引是起始地址的偏移量。
因此,当您使用array2 = array1
时,实际上是在告诉编译器:
"Let array2 hold the same address as array1"
答案 2 :(得分:0)
正如前面的答案中已经提到的那样,当您使用=
运算符时,它指的是相同的位置,更改会同时反映在这两个位置。
如果您不希望这样做,则应使用克隆阵列。您可以参考此answer上的操作方法。