2013-09-23 8 views
3

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

Integer x=5; 

Это означает, что есть ссылка «х», что указывает на значение 5.

Тогда я объявил другой эталонный под названием у, который указывает на то же значение

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

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

 y=20; 

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

+1

Забудьте о указателях - нет такой вещи в Java! 'y = 20' совпадает с' y = Integer.valueOf (20) ', поэтому' y' ссылается на другой объект впоследствии. –

ответ

3

Следующая:

y=20; 

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

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

+0

поэтому java всегда перепроверяет другой объект? и есть ли все равно, чтобы обойти это? –

+0

@fadytaher: У многих ссылок на один и тот же экземпляр изменяемого класса. – jlordo

1

Everytime Вы видите код в виде

Integer x = 5; 

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

Integer x = Integer.valueOf(5); 

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

Integer x = new Integer(5); 

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

1

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

Из "The Java Programming Language, 4-е издание" Кен Арнольд, Джеймс Гослинг и Дэвид Холмс:

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

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

Смежные вопросы