java 類型比較,你看過嗎

public class Test {         /**       * @param args       */      public static void main(String[] args) {           Integer i1 = 128;           Integer i2 = 128;           int i3 = 128;           int i4 = 128;                      System.err.println(i1 == i2);//(1)           System.err.println(i1 == i3);//(2)           System.err.println(i2 == i3);//(3)           System.err.println(i3 == i4);//(4)       }     }

false  true  true  true 


這裏其實就兩個考察點

1.常量池的知識

和String的對象池一樣,幾種整數基礎類型的包裝類型也有對象池機制。也就是說用Integer int1 = 30這種方式聲明一個Integer對象時會先到對象池中找有沒有值爲30的對象,如果有直接拿來用,如果沒有則重新創建一個對象放入對象池中。

緩存範圍[-128到127],超出此範圍的不會被緩存。而128剛好超出,所以i1 == i2的結果爲false,如果在緩存範圍內,那i1 == i2的結果就爲true

2.自動裝箱自動折箱的知識

System.err.println(i1 == i3);//(2) 
System.err.println(i2 == i3);//(3) 
這兩行代碼都隱式做了折箱操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章