用一个范例来解释Integer的拆箱(本文来自黑马程序员的博客网站,为了方便以后查阅)
1 package com.blog; 2 3 public class boxing { 4 public static void main(String[] args){ 5 6 Integer c = 10;//Integer c = new Integer.valueof(10),从缓存中获取 7 Integer d = 10; 8 System.out.println(c.equals(d));//true, equals比较值是否一样 9 System.out.println(c==d); //true,c和d都是指向缓存中的Integer.valueof(10) 10 11 /*integer 对于-128到127的数会进行缓存 12 * public static Integer valueOf(int i) { 13 assert IntegerCache.high >= 127; 14 if (i >= IntegerCache.low && i <= IntegerCache.high) 15 return IntegerCache.cache[i + (-IntegerCache.low)]; 16 return new Integer(i); 17 }*/ 18 Integer e = 128;//Integer e = new Integer.valueof(128)(即= new Integer(128)); 19 Integer f = 128; 20 System.out.println(e.equals(f));//true,equals比较值是否一样 21 System.out.println(e==f); //false, ==是比较内存地址是否一样,而e和f是分别new Integer(128)得到的 22 23 int i = 128; 24 Integer j = 128; 25 System.out.println(j.equals(i));//true 26 System.out.println(i==j);//true, 比较时j会自动拆箱为128, int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比 27 28 int k = 128; 29 Integer l = new Integer(128); 30 System.out.println(l.equals(k));//true 31 System.out.println(l==k);//true, 比较时l会自动拆箱为128 32 33 Integer m = new Integer(128); 34 Integer n = new Integer(128); 35 System.out.println(m.equals(n));//true 36 System.out.println(m==n);//false, new 得到的堆内存中的地址肯定不一样了 37 38 Integer o = new Integer(12); 39 Integer p = new Integer(12); 40 System.out.println(o.equals(p));//true 41 System.out.println(o==p);//false 42 } 43 }