Мне любопытно, почему последние два отпечатка генерировали разные значения?
class A {
int i = 1212;
}
class B extends A {
A a;
public B(A a) {
this.a = a;
}
}
class MainClass {
public static void main(String[] args) {
A a = new A();
B b = new B(a);
System.out.println(a.i);
System.out.println(b.i);
System.out.println(b.a.i);
b.a.i = 2121;
System.out.println("--------");
System.out.println(a.i); // 2121 ??
System.out.println(b.i); // 1212 ??
}
}
Когда я устанавливаю «i» следующим образом:
b.a.i = 2121;
Я обращаюсь к той же ссылке, это означает, что тот же объект A? Объект A создается только один раз, поэтому то, как можно установить переменную для объекта и получить другой результат, зависит от способа, которым я получаю доступ к этому значению?
ОБНОВЛЕНИЕ: Отладка переменных в IntelliJ
В IDE кажется, что у класса B есть своя собственная копия "i", которая, конечно, не трогается, если ее изменить с помощью "bai", потому что изменение было сделано в объекте A. Можете ли вы поспорить с этим предположением, потому что оно все еще в моей голове, и отладка IDE показывает мне, что в объекте "b" есть переменная "i".