2015-11-17 29 views
-1

今天我遇到了平等運算符的奇特行爲。java中特有的平等行爲

我希望答案是錯誤的。我們正在測試在這裏引用相等 ,畢竟 - 當你框兩個值,他們會在不同的盒子結束,即使值是相同的,正確的

Object x = 129; 
Object y = 129; 
boolean equality = (x == y); 
System.out.println(equality); 

OUTPUT:FALSE

Object x = 12; 
Object y = 12; 
boolean equality = (x == y); 
System.out.println(equality); 

OUTPUT:TRUE

有人能幫助我理解這是爲什麼表現如此。

+0

這是一個[補招(http://stackoverflow.com/questions/3621067/why-is-the-range-of-bytes-128-to-127 -in-java)不要被愚弄... ;-) –

回答

0

我們始終推薦使用object1.equals(onject2)檢查平等的,因爲當你比較使用==參考比較的價值,而不是比較。

0

Integer是int的包裝類。

整數!=整數比較實際對象引用它實際比較的目的,

其中int!= INT將比較值。

如前所述,值-128到127被高速緩存,所以爲這些返回相同的對象。所以這就是爲什麼輸出爲真。

但如果在該範圍,即(129)的外部,獨立的對象將被創建,以便參考將different.so這就是爲什麼輸出是假

爲正確的輸出: 1.進行類型int或

2.Cast類型爲int或

3.使用.equals()

1

==是參考比較。它查找「相同」對象而不是「相似」對象。 由於-128到127之間的值是從緩存中返回的,並且返回相同的引用,所以第二個比較返回true。 但是高於127的值不會從緩存中返回,因此引用不同,您的第一個比較返回false。

問得好BTW :)