嘿,我遇到了一個有趣的事件,正在尋找一個解釋。整數構造變化
在Java 1.6:
Integer a = new Integer(5);
Integer b = new Integer(5);
System.out.println(a == b);
Integer c = 5;
Integer d = 5;
System.out.println(c == d);
我得到:
false
true
在Eclipse我在調試器檢查。 a
和b
是不同的對象,而c
和d
是相同的對象(但不同於a
和b
)。
任何人都可以線索我在引擎蓋下發生了什麼?這是JVM的魔力?意識到一個Integer(5)已經在棧中?
我相信從-128到127的所有值都被緩存了,而且我很確定它是用於Sun的JVM。 – st0le 2011-05-03 04:49:25
另請參見['Integer.valueOf(int i)'](http://download.oracle.com/javase/6/docs/api/java/lang/Integer.html#valueOf%28int%29) – trashgod 2011-05-03 04:49:54
此外,則允許jvm緩存通過Integer.valueOf獲取的整數,因此即使數字在-128-127範圍之外,您也可以返回兩次調用Integer.valueOf的對象。 – MeBigFatGuy 2011-05-03 04:51:39