如果大家正在尋找一個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 方法進行判斷。