Учитывая код ниже:Переменная Java и инициализация конструктора?
public class A {
private int i = 6;
private int j = i;
public A() {
i = 5;
}
public static void main(String[] args) {
A a = new A();
System.out.println(a.i + a.j);
}
}
Почему выход этого добавления 11, а не 10? Из того, что я понимаю, конструктор работает последним после того, как статические и переменные экземпляра инициализируются. Поэтому, если конструктор является последним для запуска, он должен устанавливать «оба» i и j в 5, так как они указывают на тот же номер. Может кто-то, пожалуйста, объясните шаг за шагом, что здесь происходит, чтобы после выполнения значения было равно 11. Любая обратная связь будет принята с благодарностью.
Итак, причиной является выход 11, потому что это примитивы, а не объекты? Если бы они были объектами, то ссылки ссылались бы на один и тот же объект в памяти, а объект j был бы таким же, как и i ((j == i)). – CBA110
@ CBA110 № Ответ будет таким же, если вы использовали 'Integer' вместо' int'.Когда вы назначаете новое значение переменной (будь то примитивное значение или ссылка на объект), вы не влияете на значение других переменных, которые имеют одинаковое значение до назначения. Если, с другой стороны, 'i' и' j' относятся к одному и тому же изменяемому объекту, вызов 'i.setSomething (value)' также изменит состояние объекта, на которое ссылается 'j', поскольку оба будут ссылаться к одному и тому же объекту. – Eran
Perfect. Спасибо @Eran. – CBA110