Фрагмент кода
public class WrapperClass {
public static void main(String[] args) {
Integer i1 = 400;
Integer i2 = i1;
i1++;
System.out.println(i1 + " " + i2);
}
}
Выход 401 400
. Я не уверен, как работают объекты-обертки. Arent i1 и i2, указывающие на один и тот же объект? Что происходит в java-куче, когда выполняется вышеуказанный код?
Причина проста, классы Wrapper неизменяемы. Объяснить подробнее:
Integer i1 = 400;
Integer i2 = i1;
Теперь i1
и i2
указывают на один и тот же объект.
с этим i1++
новый объект (со значением 401) создается и назначается i1
, а i2
все еще продолжает указывать на старый объект (со значением 400).
Выход правильный. Причиной этого является Integer
неизменность.
Это не очень сложно понять
i1++;
означает
i1 = new Integer(i1.intValue()+1);
Да, конечно, все классы-оболочки неизменны.
401 401
? Пожалуйста, прочитайте документы Java ...