Назначение переменной Java: почему box1 не обновляется до box3? - PullRequest
2 голосов
/ 04 апреля 2019

У меня есть вопрос для начинающих о java-основах назначения переменных.

В моем примере кода у меня есть 3 блока (Объекты).Я назначаю блоки следующим образом:

    Box box1 = new Box("Furniture", 1);
    Box box2 = new Box("Games", 2);
    Box box3 = new Box("Cloths", 3);

    box1 = box2;
    box2 = box3;

    System.out.println(box1.toString());
    System.out.println(box2.toString());

Теперь я ожидаю, что box1 также указывает на box3.Но оказывается, что он все еще указывает на box2, хотя я также изменил ссылку box2 на box3.Почему это так?

Ответы [ 2 ]

9 голосов
/ 04 апреля 2019

Это ваше начальное состояние:

     +-----------------+             +----------------+
     |  box1 ( ref )   +------------>|  box1 ( obj )  |
     +-----------------+             +----------------+

     +-----------------+             +----------------+
     |  box2 ( ref )   +------------>|  box2 ( obj )  |
     +-----------------+             +----------------+

     +------------------+            +----------------+
     |  box3 ( ref )    +----------->|  box3 ( obj )  |
     +------------------+            +----------------+

Это то, что происходит после box1 = box2:

     +-----------------+             +----------------+
     |  box1 ( ref )   +----+        |  box1 ( obj )  |
     +-----------------+    |        +----------------+
                            |
     +-----------------+    +------> +----------------+
     |  box2 ( ref )   +------------>|  box2 ( obj )  |
     +-----------------+             +----------------+

     +------------------+            +----------------+
     |  box3 ( ref )    +----------->|  box3 ( obj )  |
     +------------------+            +----------------+

Это то, что происходит после box2 = box3

     +-----------------+             +----------------+
     |  box1 ( ref )   +----+        |  box1 ( obj )  |
     +-----------------+    |        +----------------+
                            |
     +-----------------+    +------> +----------------+
     |  box2 ( ref )   +----+        |  box2 ( obj )  |
     +-----------------+    |        +----------------+
                            |
     +------------------+   +------->+----------------+
     |  box3 ( ref )    +----------->|  box3 ( obj )  |
     +------------------+            +----------------+

Теперь вы должны выяснить, почему вывод такой.:)

0 голосов
/ 04 апреля 2019

Посмотрите, имеет ли смысл для вас следующее:

int box1 = 1;
int box2 = 2;
int box3 = 3;

box1 = box2;
box2 = box3;

System.out.println(box1);
System.out.println(box2);

box1 печатает "2" и box2 печатает "3".Это то же самое, что и копирование ссылок, и оно всегда будет иметь один и тот же шаблон.

...