次のコードは、2 つの異なる出力を提供するため、非常にわかりにくいように思われました。コードは jdk 1.7 でテストされています。
public class NotEq {
public static void main(String[] args) {
ver1();
System.out.println();
ver2();
}
public static void ver1() {
Integer a = 128;
Integer b = 128;
if (a == b) {
System.out.println("Equal Object");
}
if (a != b) {
System.out.println("Different objects");
}
if (a.equals(b)) {
System.out.println("Meaningfully equal.");
}
}
public static void ver2() {
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2) {
System.out.println("Equal Object");
}
if (i1 != i2){
System.out.println("Different objects");
}
if (i1.equals(i2)){
System.out.println("Meaningfully equal");
}
}
}
出力:
[ver1 出力]
異なるオブジェクト
意味的に等しい。[ver2 出力]
等しいオブジェクト
意味的に等しい
== と != のテストで、Integer.MAX_VALUE よりもはるかに小さい同じ数値に対して、ver1() と ver2() の結果が異なるのはなぜですか? == 127 より大きい数値 (コードに示されているように Integer のようなラッパー クラスの場合) をチェックすることは、完全に時間の無駄であると結論付けることができますか?