2016-05-27 1 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 = Integer.valueOf(i.intValue() + 1); 
        ^auto-unboxing 
      ^autoboxing 

iintValue

ため、オートボクシングの
i = i + 1; 

は、この行は、実際に相当しますスタック; 1が加えられる。ヒープ上にIntegerという新しいインスタンスが作成されることがあります(401の値は内部でIntegerによってキャッシュされることは保証されていないため)。 x == iについては

:あなたはxiが異なるインスタンスであるため、常に、falseを印刷し

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

のようなものを意味すると仮定。

+0

常にそうではありません。なぜなら、整数キャッシングが変化する可能性があるからです。 –

+1

@SleimanJneidiが修正されました。 –

+0

ありがとうございました!わかった 。^^ – Tianxin

1

例:ia1; x = iは、xを意味します。a1; i = i + 1は、a2を指すxポイントを意味します。 だからx == ia1と等しくないのでfalseを返します。a2と等しくありません。

関連する問題