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. Python 實現勞拉游戲的實例代碼(四連環、重力四子棋)2. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程3. Java GZip 基于內存實現壓縮和解壓的方法4. java獲取文件編碼,jsoup獲取html純文本操作5. 利用CSS制作3D動畫6. 一款功能強大的markdown編輯器tui.editor使用示例詳解7. 淺談Android Studio導出javadoc文檔操作及問題的解決8. 存儲于xml中需要的HTML轉義代碼9. jsp+servlet簡單實現上傳文件功能(保存目錄改進)10. python 寫函數在一定條件下需要調用自身時的寫法說明
