Как переменные экземпляра влияют на значения моих конструкторов здесь? - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над Java-упражнением и несколько сбит с толку новыми значениями последних 4 строк кода.

public class Snake {
    public Snake x = null;
    public Snake y = null;

    public static void main(String[] args) {
        Snake a = new Snake();
        Snake b = new Snake();
        a.x = a;
        b.x = a.x;
        b.y = b.x;
        a.y = b.y.x;
    }
}

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вот как это работает:

a.x = a;

объект x Snake (свойство) объекта a Snake становится ссылкой (указывает) на сам объект a Snake.

b.x = a.x;

объект x Snake (свойство) объекта b Snake становится ссылкой (указывает) на объект a.x Snake, который ранее был установлен для ссылки на объект a Snake.
Таким образом, b.x также становится ссылкой (указывает) на объект a Snake.

b.y = b.x;

y Объект Snake (свойство) объекта b Snake становится ссылкой (указывает) на объект b.x Snake, который ранее был установлен для ссылки на объект a Snake.
Таким образом, этот b.y также становится ссылкой (указывает) на a объект Snake.

a.y = b.y.x;

объект y Snake (свойство) объекта a Snake становится ссылкой (указывает) на объект b.y.x Snake, а поскольку b.y ранее был установлен на a, он эквивалентен a.x который ранее был установлен для ссылки на a объект Snake.
Так что a.y также становится ссылкой (указывает) на объект a Snake.

Наконец : все левые части назначений относятся (точка) к a.

0 голосов
/ 13 ноября 2018

Тогда вы поняли, что a и b - две змеи.Но на самом деле это ссылки на двух разных змей.

a.x = a: означает, что make a.x относится к змее, указанному как a.

b.x = a.x: означает, что make b.x относитсядля змеи, обозначенной a.x (так же, как a).

b.y = b.x: означает, что make b.y относится к змее, обозначенной b.x (так же, как a).

a.y = b.y.x: означает, что make a.y относится к змее, обозначенной b.y.x, как b.y относится к a, это относится к a.x, что совпадает с a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...