首页 > 其他分享 >自动装箱与拆箱

自动装箱与拆箱

时间:2022-10-30 23:34:57浏览次数:39  
标签:拆箱 i1 i5 i4 40 自动 Integer 装箱

自动装箱、拆箱

看完了包装类型的便捷性后,我们再来落实到自动装箱、自动拆箱上...

怎么就自动装箱,自动拆箱了呢?

上一段代码,看看哪是自动装箱跟自动拆箱:

  • // 自动装箱
  • Integer a = 100;
  • // 自动拆箱
  • int b = a;

自动装箱,相当于Java编译器替我们执行了 Integer.valueOf(XXX);

自动拆箱,相当于Java编译器替我们执行了Integer.intValue(XXX);

看完编译器替我们做的,接下来我们再通过源码看看,首先是自动装箱 valueOf() 方法:

public static Integer valueOf(int i) {
 if (i >= IntegerCache.low && i <= IntegerCache.high)
  return IntegerCache.cache[i + (-IntegerCache.low)];
 return new Integer(i);
}

具体说明

Integer i1 = 40;//自动装箱
Integer i2 = new Integer(40);//通过new关键字会创建对象
System.out.println(i1==i2);//输出 false

一些例子

 Integer i1 = 40;
 Integer i2 = 40;
 Integer i3 = 0;
 Integer i4 = new Integer(40);
 Integer i5 = new Integer(40);
 Integer i6 = new Integer(0);
 
 System.out.println("i1=i2 " + (i1 == i2));
 System.out.println("i1=i2+i3 " + (i1 == i2 + i3));
 System.out.println("i1=i4 " + (i1 == i4));
 System.out.println("i4=i5 " + (i4 == i5));
 System.out.println("i4=i5+i6 " + (i4 == i5 + i6)); 
 System.out.println("40=i5+i6 " + (40 == i5 + i6));

结果

i1=i2 true
i1=i2+i3 true
i1=i4 false
i4=i5 false
i4=i5+i6 true
40=i5+i6 true

解释

语句"i4 == i5 + i6",因为"+"不适合对象操作,所有进行自动拆箱,即"i4 == 40",然后对象无法于数值比较,然后"i4"自动拆箱为40,即"40==40"

 

标签:拆箱,i1,i5,i4,40,自动,Integer,装箱
From: https://www.cnblogs.com/happy12123/p/16842770.html

相关文章