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とメモリ
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とメモリ
ここでは自明ではないだけの行は次のようになりますに移動したので
i = Integer.valueOf(i.intValue() + 1);
^auto-unboxing
^autoboxing
i
のintValue
:
i = i + 1;
は、この行は、実際に相当しますスタック; 1が加えられる。ヒープ上にInteger
という新しいインスタンスが作成されることがあります(401の値は内部でInteger
によってキャッシュされることは保証されていないため)。 x == i
については
:あなたはx
とi
が異なるインスタンスであるため、常に、falseを印刷し
System.out.println(x == i);
のようなものを意味すると仮定。
常にそうではありません。なぜなら、整数キャッシングが変化する可能性があるからです。 –
@SleimanJneidiが修正されました。 –
ありがとうございました!わかった 。^^ – Tianxin
例:i
a1
; x = i
は、x
を意味します。a1
; i = i + 1
は、a2
を指すxポイントを意味します。 だからx == i
はa1
と等しくないのでfalseを返します。a2
と等しくありません。
'x == i'は有効な文ではないので、このコードはコンパイルされません。 –