【Java】Integer a = 10, b =10; a == b は true or false ?
問題 1
public class Main { public static void main(String[] args) { Integer a = 10; Integer b = 10; System.out.println(a == b); } }
出力結果は true or false どちらだと思いますか?
正解は...
true
解説は次の問題の後で!
問題 2
public class Main { public static void main(String[] args) { Integer a = 1000; Integer b = 1000; System.out.println(a == b); } }
出力結果は true or false どちらだと思いますか?
正解は...
false
全問正解できましたか?
正解できた方は、JVMの気持ちを理解していて素晴らしいと思います。
自分は間違えました。
解説もどき
JVMはメモリを節約しようと、常日頃から努力しています。
Integerの小さい値がよく使われていることを発見しました。
ある程度の数字なら自分たちであらかじめ用意しておいて、いくつもメモリを使用させないようにしようとしました。
ある程度と言うのは、1バイト(8bit)までです。
-127から127までの数字はJVM内部で保持されています。
そのため
public class Main { public static void main(String[] args) { Integer a = -127; Integer b = -127; System.out.println(a == b); } }
も
true
です。
と言うことは
public class Main { public static void main(String[] args) { Integer a = 128; Integer b = 128; System.out.println(a == b); } }
は
false
になります。
1000は8bit以上なのでfalseと言うことになります。
まとめ