Объявление переменных с использованием классов-оболочек 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 указывают на разные ячейки памяти.