数组=数组实际上如何工作?

时间:2018-07-24 17:49:30

标签: java arrays multidimensional-array

我想了解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]);

3 个答案:

答案 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上的操作方法。