先來看一組比較。
首先判斷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() 方法源碼:
發現,先是判斷參數是否在一個緩沖池中,緩沖池内為 -128 ~ 127。如果在其中就直接傳回緩沖池中的值,否則就建立一個新的對象。
是以再回過頭來看最後兩個比較就顯而易見了。