Java Integer及int裝箱拆箱對比
示例代碼:
class BoxIntInteger { public static void main(String[] args) { Integer a = new Integer(10111); int b = 10111; boolean equal1 = a == b; boolean equal2 = a.equals(b); System.out.println(equal1); System.out.println(equal2); }}
反編譯字節碼:
public static void main(String args[]){ Integer a = new Integer(10111); int b = 10111; boolean equal1 = a.intValue() == b; boolean equal2 = a.equals(Integer.valueOf(b)); System.out.println(equal1); System.out.println(equal2); }
1:可以看出對于Integer與int使用==比較大小的話,優先Integer拆箱。
2: 如果使用equals比較大小的話,則int裝箱。
提示:對于Integer與int之間大小比較優先使用equals比較,否則容易出現空指針,例如:
Integer c= null;System.out.println(c==1);
原因:由于Integer需要調用intValue進行拆箱,因而空指針。
Integer與Integer必須使用equals方法比較,這個就不必解釋了。但是通常我們可以看先Integer與Integer之間使用==也可以正確比較,原因是:Integer對于-128到127之間的數字在緩存中拿,不是創建新對象。
緩存獲取數據源碼:java.lang.Integer#valueOf(int)
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i);}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章:
1. java實現圖形化界面計算器2. IntelliJ Idea2017如何修改緩存文件的路徑3. IntelliJ IDEA設置條件斷點的方法步驟4. IIS Express 取代 ASP.NET Development Server的配置方法5. python flask框架快速入門6. Spring-Richclient 0.1.0 發布7. javascript設計模式 ? 建造者模式原理與應用實例分析8. 淺談SpringMVC jsp前臺獲取參數的方式 EL表達式9. Python使用oslo.vmware管理ESXI虛擬機的示例參考10. Express 框架中使用 EJS 模板引擎并結合 silly-datetime 庫進行日期格式化的實現方法
