以下代码打印“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]);
答案 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;
本质上意味着第二个和第一个现在指的是同一个数组 即数组内的值不会被复制。