Простите, если это дубликат, я не могу найти ничего, что объясняет, что я вижу хорошо.
Следующая программа:
Object a = new Object();
Object b = a;
System.out.println( "a: " + a );
System.out.println( "b: " + b );
a = null;
System.out.println( "a: " + a );
System.out.println( "b: " + b );
Выходит так:
a: java.lang.Object@3e25a5
b: java.lang.Object@3e25a5
a: null
b: java.lang.Object@3e25a5
Но ПОЧЕМУ?!? Я так смущен этим. Разве «b» не должно ссылаться на «a»? Следовательно, если «a» больше не ссылается на что-либо еще (например, ноль), то не должно ли «b»? Я явно упускаю что-то фундаментальное здесь.
Заранее спасибо.
РЕДАКТИРОВАТЬ # 1
Я думаю, что меня сбило с толку то, что я распечатывал адрес. По какой-то причине, по-моему, я распечатывал какое-то магическое значение, указывающее указатели \ ссылки - когда в действительности установка b = a
не делает их одинаковыми, это просто создание нового указателя на то же место в куче. Я надеюсь, что это помогает кому-то еще.