Объявление переменных с использованием классов-оболочек Java

В Java мы можем использовать классы-оболочки для объявления переменных. Например

    Integer x=5;

Это означает, что существует ссылка "х", которая указывает на значение 5.

Затем я объявил еще одну ссылку под названием у, которая указывает на то же значение

    Integer y=x;  //now y should point to the number "5"

Затем я изменил значение, на которое указывает у

     y=20;

Не означает ли это, что x и y указывают на 20? потому что когда я печатаю х, я все еще получаю 5

4 ответа

Решение

Следующие:

y=20;

повторное связывание y указать на другое Integer объект.

Не трогает x, поэтому его значение не меняется.

В первой строке Integer x=5;x является ссылкой на объект In teger со значением 5. Тогда Integer y=x; создает другую ссылку для того же объекта, поэтому x а также y ссылаться на тот же объект. В заключение, y=20; делает ссылку y указать на другой объект, Integer значения 20.

Из "Языка программирования Java, 4-е издание" Кена Арнольда, Джеймса Гослинга и Дэвида Холмса:

Язык программирования Java не передает объекты по ссылке; он передает ссылки на объекты по значению. Поскольку две копии одной и той же ссылки ссылаются на один и тот же фактический объект, изменения, внесенные через одну ссылочную переменную, видны через другую.

Но в вашем случае вы на самом деле не изменяете исходный объект, а изменяете одну из его ссылок, чтобы указывать на другой объект.

Каждый раз, когда вы видите код в форме

Integer x = 5;

компилятор заменяет его чем-то вроде

Integer x = Integer.valueOf(5);

который почти похож на

Integer x = new Integer(5);

Так на самом деле, y = 20 не что иное как y = new Integer(20), таким образом, указатель y перемещается, чтобы указывать на вновь созданный объект Integer.

Integer x = 5

Приведенный выше оператор выделяет пространство памяти, которое содержит значение 5 и на которое ссылается x;

Integer y = x

Приведенный выше оператор указывает ссылку y на ту же ячейку памяти, что и x.

Когда вы присваиваете значение y = 20. Это создает новое пространство памяти, которое содержит значение 20 и на которое ссылается y. Итак, в этот момент и x, и y указывают на разные ячейки памяти.

Другие вопросы по тегам