關於自動拆裝箱時的陷阱
阿新 • • 發佈:2018-11-19
1 /* 2 * 自動裝箱的陷阱 3 * 1、兩個包裝類進行比較時,包裝類的"=="運算在不遇到算術運算的情況下不會自動拆箱,如下例若判斷c==g則會報編譯錯誤; 4 * 2、兩個包裝類進行比較時, 包裝類的"equals()"方法不處理資料轉型的關係,如下例的g.equals(a+b)為false; 5 * 3、對於Integer類,當值在-128-127之間時,會使用Integer.ValueOf()方法直接從快取中取出相應物件, 6 * 而當值不在這個範圍內時會使用Integer.ValueOf()方法new一個Integer物件,如下例的e和f不是同一個物件 7 * 的引用,而c和d是同一個物件的引用。8 */ 9 public class AutomaticPackingTest { 10 11 public static void main(String[] args) { 12 Integer a = 1; 13 Integer b = 2; 14 Integer c = 3; 15 Integer d = 3; 16 Integer e = 321; 17 Integer f = 321; 18 Long g = 3L; 19 int h = 321;20 int i = 321; 21 22 System.out.println(c==d); 23 System.out.println(e==f); 24 System.out.println(e.equals(f)); 25 System.out.println(h==i); 26 System.out.println(i==e); 27 System.out.println(c==(a+b)); 28 System.out.println(c.equals(a+b));29 System.out.println(g==(a+b)); 30 System.out.println(g.equals(c)); 31 System.out.println(g.equals(a+b)); 32 } 33 34 }
執行結果