Я не понимаю, как строковые массивы влияют на знаки равенства в этой проблеме (Java) - PullRequest
0 голосов
/ 03 января 2019

import java.util.ArrayList;
public class MyClass {
    public static void main(String args[]) {
     String[] xy = {"X", "Y"};
     String[] yx = xy;
     yx[0]=xy[1];
     yx[1]=xy[0];
     System.out.println(xy[0] + xy[1]+yx[0]+yx[1]);
    }
}

Когда я запускаю это через Eclipse и другие программы, он всегда печатает YYYY вместо XYYX, как это? Когда я начал экспериментировать с кодом, я закончил с XXXX, когда я удалил yx [0] = xy [1]. Я думаю, что это, возможно, как-то связано со знаками равенства, но меня смущает то, как он выдает YYYY, а не XYYX.

1 Ответ

0 голосов
/ 03 января 2019

Это потому, что массивы являются ссылками в Java.Поэтому присвоение xy yx делает их одним и тем же массивом.Поэтому, когда вы перезаписываете первый индекс с помощью "Y", они оба имеют значения {"Y", "Y"}.

import java.util.ArrayList;
public class MyClass {
    public static void main(String args[]) {
     // xy[0] = "X" and xy[1] = "Y"
     String[] xy = {"X", "Y"};
     // arrays are references, so yx and xy are now the same array
     String[] yx = xy;
     // yx[0] = "Y"
     yx[0]=xy[1];
     // yx[1] = "Y", this is because they refer to the same array
     yx[1]=xy[0];
     System.out.println(xy[0] + xy[1]+yx[0]+yx[1]);
    }
}

Если вы распечатываете оба массива, вы можете видеть это.Добавление этого после yx = xy:

System.out.println(xy);
System.out.println(yx);

даст некоторый результат, подобный следующему:

[Ljava.lang.String;@3caeaf62
[Ljava.lang.String;@3caeaf62
...