2015-03-26 3 views
1

Код сниппетаКак работают объекты-обертки?

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-куче, когда выполняется вышеуказанный код?

+2

[проверить этот вопрос] (http://stackoverflow.com/questions/6166348/are-all-primitive-wrapper-classes-immutable-objects) – SomeJavaGuy

+0

Что еще вы ожидали? '401 401'? Пожалуйста, прочитайте документы Java ... –

+0

Спасибо @KevinEsche Я отметил мой вопрос как дубликат :)) –

ответ

3

Причина проста, классы-оболочки неизменны. Для того, чтобы подробно объяснить: -

Integer i1 = 400; 
Integer i2 = i1; 

Теперь i1 и i2 указывают на тот же объект.

с этим i1++, новый объект (со значением 401) создается и присваивается i1, в то время как i2 все еще продолжает указывать на старый объект (со значением 400).

1

Выход правильный. Причина этого - Integer неизменность.

+0

Это не отвечает на большинство его вопросов. –

+0

@ThomasStets, вероятно, да, но более чем достаточно, чтобы узнать недостающую часть. –

0

Да, конечно, все классы-оболочки неизменны.

0

Это не очень трудно понять

i1++; 

означает

i1 = new Integer(i1.intValue()+1); 
+0

Что трудно понять, так это то, как вы написали бы свой собственный класс-оболочку для этого. Это не похоже на java, что позволяет вам перегружать операторов. – CandiedOrange

Смежные вопросы