当我在Java中查看代码示例时,我看到了一个奇怪的代码:
public class Application {
public static void main(String[] args) {
String[] x = {"A"};
String[] y = x;
x[0] = "B";
System.out.print(x[0] + " " + y[0]);
}
}
我不明白为什么结果“B B”是正确的?当我创建并初始化数组x和y并且指定数组x的零元素等于B时,我认为答案必须是“B A”。
答案 0 :(得分:6)
String[] y = x;
表示数组y
现在引用数组x
。
因此更改x
的内容意味着y
的内容发生变化(因为它们是相同的)。
用Java来详细阐述:
String[] y = {...};
表示您声明y
是对数组的引用,而不是数组本身。因此,在分配时,您将分配引用而不是复制对象值。
答案 1 :(得分:2)
现在我们如何在Java中复制数组。这就是你现在正在做的事情:
x y
+---+ +---+
| a |<---|-- |
+---+ +---+
因此,当您更改x
的内容时,y
的内容将会更改。
如果要复制数组,可以使用Arrays#copyOf
:
String[] y = Arrays.copyOf(x, x.length);
现在,如果你发现x
,y
将不会被更改。
答案 2 :(得分:1)
在Java Array中被视为对象引用。您正在将值更改为参考。
为了说明试试这个
String[] x = {"A"};
String[] y = x;
System.out.println(x==y); //true -> X and Y are pointing the same reference.
答案 3 :(得分:0)
当调用赋值运算符时,Java总是按值复制。你像这样声明第一个数组:
String [] x = {“A”};
和x现在保持对此数组的引用。当您将x分配给y时,它只是将对x的引用复制到y变量,所以现在x和y都表示相同的数组。当您在一个数组中更改某些内容时,更改也会影响其他数组。 Look here for better understanding