我比較兩段代碼爪哇 - 拳擊整數 - 爲什麼它返回true,如果應該返回false
Integer x = new Integer(0), y;
y=x;
x+=0;
System.out.println(x==y); // prints false
而且
Integer x = 0, y;
y=x;
x+=0;
System.out.println(x==y); // prints true
不應同時返回false
?這不是原始變量,並且在第二個代碼中,即使在添加零後,它也會打印true
。我知道拳擊(整數從-128到127),但是爲什麼拳擊在第二段代碼而不是在第一段?
不,因爲在'-128 - 127'範圍內的Integer會被緩存。在你的第一個例子中,你明確地創建了一個新的'Integer',儘管每個'Integer'在'-128 - 127'範圍內都會引用同一個對象。 – SomeJavaGuy
儘管還有其他回答說-128-127不是教條,它只是JVM的一個功能,可以在一些版本中使用-Djava.lang.Integer.IntegerCache.high屬性進行調整,默認值可能與JVM到JVM,**你永遠不應該依賴這種行爲!**請參閱http:// stackoverflow。com/questions/15052216/how-large-is-the-integer-cache –