Ваше предположение верно. Java сохраняет ссылку на животное, на которое указывает r1
.
Обратите внимание, что это не то же самое, что и передача по ссылке. Java всегда передается по значению, но сами значения являются ссылками.
Это означает, что если вы вызываете конструктор House
внутри конструктора, вы назначаете новый объект переданному в
public House(int id, Animal animal) {
animal = new Animal(11, "Bertha");
}
Animal r1 = new Animal(10,"Amanda");
House c = new House(100, r1);
System.out.println(r1);
Таким образом, вышеупомянутый println
по-прежнему печатает «Аманда» (а не «Берта»). Переменная r1
, переданная в конструктор, не то же самое, что переменная animal
, используемая в конструкторе. Значение ссылки из r1
равно скопировано в animal
. Переназначение animal
не влияет на r1
.