Integerのキャッシュ
なんと、-128から127までのIntegerオブジェクトはキャッシュされるとのこと。
なので、
Integer.valueOf(1) == Integer.valueOf(1)
はtrueだし、
Integer.valueOf(200) == Integer.valueOf(200)
はfalseになるようです。
まぁオブジェクトの==比較を使うか?というとStringでさえ微妙ですが。
当然、コンストラクタによる生成の場合は別途オブジェクトが出来るので==比較はfalseとなりますが、
オートボクシングによる型変換はvalueOf方式のようです。
Integer i1 = 1; Integer i2 = 1; System.out.println(i1 == i2);
はtrueです。
さらにめもっておくと、
キャッシュとしては、クラス変数にてキャッシュ配列の初期化をしているので利用都度のキャッシュ生成ではありません。
渋いというか微妙な仕様だなぁ・・・