关于java装箱和拆箱
转载http://www.cnblogs.com/dolphin0520/p/3780005.html
Integer a = 100 ==> Integer a = Integer.valueof(100)
int n = a ==> n = Integer.intvalue(a) 变为数值
Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;前面 4 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,Character创建了数值在[0,127]范围的缓存数据,Boolean 直接返回True Or False。如果超出对应范围仍然会去创建新的对象。
Integer i1 =
100
; Integer i2 = 100
; System.out.println(i1==i2); true
Integer i3 =
100
; Integer i4 = 100
; System.out.println(i3==i4); false 因为超出常量池,创建new Integer(i)
Float,Double 并没有实现常量池技术 他们的比较都是false
当 "=="运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)