天天看點

Integer、int 比較詳解

Integer、int 比較詳解

先來看一組比較。

首先判斷a == b 肯定是false,因為都是new的對象,位址不同。

然後 a == c 和  b == c,因為都是和int去比較,是以會有一個自動拆箱的過程,Integer會拆箱為int,是以怎麼比都相等。

同理c == d一樣。

在看 a == d,因為 a 是new出來的,d也不是int,是以肯定不相等。

在看d == e,都是Integer 指派,這裡jvm會編譯成Integer.valueOf();

然後看valueOf() 方法源碼:

Integer、int 比較詳解

發現,先是判斷參數是否在一個緩沖池中,緩沖池内為 -128 ~ 127。如果在其中就直接傳回緩沖池中的值,否則就建立一個新的對象。

是以再回過頭來看最後兩個比較就顯而易見了。