1. 程式人生 > >關於自動拆裝箱時的陷阱

關於自動拆裝箱時的陷阱

 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 }

執行結果