以下の2つの方法で整数を宣言することに違いはありますか
Integer Age = 25;
Integer Age = new Integer(25);
最初の整数は整数プールから供給され、==
チェックは true を返します。
Integer age = 25;
Integer a = 25;
System.out.println(a == age);
2 番目のものは毎回新しいオブジェクトを作成し、==
チェックは false を返します。
Integer age = new Integer(25);
Integer a = new Integer(25);
System.out.println(a == age);
デフォルトでは -128 -> 127 までの整数のみがキャッシュされるため、次のスニペットも false を返します。プロパティjava.lang.Integer.IntegerCache.high
を 127 より大きい値に設定することでこれを微調整でき、true が返されます。
Integer age = 129;
Integer a = 129;
System.out.println(a == age);
1 つ目はオートボクシングを使用し、2 つ目は毎回新しいオブジェクトを作成します。キャッシュ内で既に使用可能な場合、Integer クラス内で維持されているローカル キャッシュからフェッチする Integer.valueOf() を使用できる場合に最適です。
はい!
重複オブジェクトが作成されるため、この行は絶対に使用しないでください。
Integer Age = new Integer(25);
次のようなものを使用するのと同じです:
String age = new String("old");
両方とも異なります age が参照変数であり、スタックに格納されていることがわかっています 1 行目の 25 はスタックに格納されます 25 は、2 行目で作成されたヒープ u 内のオブジェクトのアドレスであると言えますアドレス位置 25 のヒープ値は整数 25 です