オートボクシングはかなり怖いです。==
私はとの違いを完全に理解して.equals
いますが、次のバグを私から取り除くことはできません:
final List<Integer> foo = Arrays.asList(1, 1000);
final List<Integer> bar = Arrays.asList(1, 1000);
System.out.println(foo.get(0) == bar.get(0));
System.out.println(foo.get(1) == bar.get(1));
それは印刷します
true
false
なぜ彼らはこのようにしたのですか?キャッシュされた整数と関係がありますが、その場合、プログラムで使用されるすべての整数をキャッシュしないのはなぜですか? または、JVM が常にプリミティブに自動的にアンボックスしないのはなぜですか?
false false または true true を印刷する方がずっと良いでしょう。
編集
古いコードの破損については同意しません。trueをfoo.get(0) == bar.get(0)
返すことで、すでにコードが壊れています。
これは、バイト コードで Integer を int に置き換えることによってコンパイラ レベルで解決できませんか (null が割り当てられない限り)。