昔からよくある Java パズルでブログの更新を久しぶりにしておきます。
次のコードの結果はどうなるでしょう?
package jp.yucchi.integercachedemo;
public class IntegerCacheDemo {
public static void main(String[] args) {
Integer i = 127;
Integer j = 127;
System.out.println(i == j);
Integer k = 128;
Integer l = 128;
System.out.println(k == l);
Integer m = -128;
Integer n = -128;
System.out.println(m == n);
Integer o = -129;
Integer p = -129;
System.out.println(o == p);
}
}
true
false
true
false
となります。
間違えてませんよね!
今さらですが、これらは Integer.valueOf() メソッドが使われて -128 から 127 までは IntegerCache クラスであらかじめ用意されているものが使われる。
小さな親切、大きなお世話というやつです!
でも、用意してある物は使わなくては損ですよね。
じゃあ、どうしてもっといっぱい作って用意しておいてくれないの?って言うあなたに
JVM の実行時引数による制御も可能です。
-Djava.lang.Integer.IntegerCache.high=<size>
それとも、
-XX:AutoBoxCacheMax=<size>
で OK です。
-Djava.lang.Integer.IntegerCache.high=128 と設定して実行すると先ほどのプログラムの結果は
true
true
true
false
となります。
ちなみに IntegerCache の最小値の設定方法は私は知りません。(;゜ロ゜)
以上、よくあるネタ終了です。
Hatena タグ: Java