【面試題集】Integer相等比較及自動裝箱、拆箱

品茗IT-面試題集-首發

如果大家正在尋找一個java的學習環境,或者在開發中遇到困難,可以加入我們的java學習圈,點擊即可加入,共同學習,節約學習時間,減少很多在學習中遇到的難題。

Integer使用詳解

Integer x = 100;
Integer y = 100;
Integer x1= 255;
Integer y1 = 255;
Integer x2 = 100;
int y2 = 100;
Integer x3 = 255;
int y3 = 255;
Integer x4 = 100;
Integer y4 = new Integer(100);

System.out.println(x == y);  //true
System.out.println(x1 == y1); //false
System.out.println(x1.equals(y1));  //true
System.out.println(x2 == y2);  //true
System.out.println(x3 == y3);  //true
System.out.println(x4 == y4);  //false
System.out.println(x4.equals(y4));  //true

可以看出,:

  • Integer 在-128 至 127 值,可以直接使用==進行判斷;
  • Integer 在-128 至 127 值之外的範圍,要用equals 方法進行判斷;
  • 無論如何,Integer與new Integer()不會相等。要使用equals 方法進行判斷;
  • 無論如何,Integer與int比較,只要值相等,都會返回true。

這是因爲:

在Java SE5中,爲了減少開發人員的工作,Java提供了自動拆箱與自動裝箱功能。

  • 自動裝箱: 就是將基本數據類型自動轉換成對應的包裝類。
  • 自動拆箱:就是將包裝類自動轉換成對應的基本數據類型。

Integer i=10 可以替代 Integer i = new Integer(10);這就是因爲Java幫我們提供了自動裝箱的功能,不需要開發者手動去new一個Integer對象。

包裝類與基本數據類型進行比較運算,是先將包裝類進行拆箱成基本數據類型,然後進行比較的。

另外,Ingeter是int的包裝類,int的初值爲0,Ingeter的初值爲null。

擴展閱讀

阿里Java開發手冊編程規約之OOP 規約一章中指出:

【強制】所有整型包裝類對象之間值的比較,全部使用 equals 方法比較。

說明:對於 Integer var = ? 在-128 至 127 範圍內的賦值,Integer 對象是在 IntegerCache.cache 產 生,會複用已有對象,這個區間內的 Integer 值可以直接使用==進行判斷,但是這個區間之外的所有數 據,都會在堆上產生,並不會複用已有對象,這是一個大坑,推薦使用 equals 方法進行判斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章