在数组中分配值

时间:2014-02-26 02:00:53

标签: java arrays

以下代码打印“YYYY”,但对于我的生活,我无法理解为什么。最后一行打印出第一个存储的值,但我看不到第一个值的变化。

String[] first = {"x", "y"};
String[] second = first;
second[0]=first[1];
second[1]=first[0];
System.out.println(first[0]+first[1]+second[0]+second[1]);

3 个答案:

答案 0 :(得分:1)

您创建数组{x,y},指向该数组的指针存储在名为first

的变量中
String[] first = {"x", "y"};

然后将变量first的值(即POINTER)复制到变量second中。两个变量都指向相同的结构,在这种情况下我们是{x,y}

String[] second = first;

你说存在于你指向的数组中的第二个单元格中的内容被复制到第一个单元格。将y复制到第一个单元格,此时,您有{y,y}

second[0]=first[1];

与之前类似,但它不会改变任何东西(你已经有{y,y}

second[1]=first[0];

结果很明显我希望:)

System.out.println(first[0]+first[1]+second[0]+second[1]);

答案 1 :(得分:0)

变量first引用数组。

first  -> [ 0:x , 1:y ]

变量second引用变量second引用的相同数组。

second -> [ 0:x , 1:y ] <- first

second引用的数组的索引0处的元素现在引用first引用的同一数组的索引1处的元素。

second[0] -> first[1] // second -> [ 0:y , 1:y ] <- first

second引用的数组的索引1处的元素现在引用first引用的同一数组的索引0处的元素。

second[1] -> first[0] // second -> [ 0:y , 1:y ] <- first

答案 2 :(得分:0)

Java数组是通过引用分配的,所以

String[] second = first;

本质上意味着第二个和第一个现在指的是同一个数组 即数组内的值不会被复制。