2016-05-27 3 views
-1
public class test{ 
    public static void main(String[] args) { 
     Integer i = new Integer(400); 
     Integer x = i; 
     i = i + 1; 
     x == i; 
    } 
} 

Может кто-нибудь помочь мне понять, что память изменилась из-за кучи и стека. Если x == i сравнивает адрес памяти?Целое число + 1 и память

+3

'x == i' не является допустимым оператором, поэтому этот код не будет компилироваться. –

ответ

3

Единственная линия, которая не нуждается в пояснениях здесь:

i = i + 1; 

Из-за Autoboxing, эта линия фактически эквивалентно:

i = Integer.valueOf(i.intValue() + 1); 
        ^auto-unboxing 
      ^autoboxing 

Так intValue из i перемещается в стек; 1; то новый кусок Integer может быть создан в куче (поскольку значения, достигающие 401, не гарантируются кэшированием Integer внутри).

Что касается x == i: предполагается, что вы имели в виду что-то вроде

System.out.println(x == i); 

Это всегда будет печатать ложь, так как x и i это разные случаи.

+0

Не всегда, потому что кеширование целых чисел может отличаться от –

+1

@SleimanJneidi исправлено. –

+0

Спасибо! Я понял .^^ – Tianxin

1

пример: i адрес по адресу a1; x = i означает x адрес отправителя a1; i = i + 1 означает x указывает на адрес a2; так x == i вернет false как a1 не равно a2.

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