下面的代碼似乎讓我很困惑,因爲它提供了兩個不同的輸出。代碼在jdk 1.7上進行了測試。How!=和==運算符在Java中的Integers上工作嗎?
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輸出]
平等對象
有意義等於
爲什麼==和!=測試產生用於VER1()和VER2()爲相同數目大於整數小得多不同的結果。 MAX_VALUE?是否可以得出結論:==檢查大於127的數字(如代碼中所示的Integer等包裝類)是否完全浪費時間?
這是因爲自動裝箱機制緩存和重新使用範圍-128 - 127中的值的同一對象。這是上一個問題的重複。 – aioobe 2012-03-22 14:16:36
@quixoto:看我的編輯回覆:) – BoltClock 2012-03-22 14:41:54
http://stackoverflow.com/questions/1700081/why-does-128-128-return-false-but-127-127-return-true-when-converting-to -integ – 2016-02-17 13:16:56