よく見かけるネタ IntegerCache 問題
昔からよくある Java パズルでブログの更新を久しぶりにしておきます。
次のコードの結果はどうなるでしょう?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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 の最小値の設定方法は私は知りません。(;゜ロ゜)
以上、よくあるネタ終了です。
TAGS: Java | 2015年12月8日4:47 PM
Trackback URL