java1.5增加了自动装箱(autoboxing)和自动拆箱(auto-unboxing)。
基本类型和装箱基本类型的区别:
1:基本类型只有值,而装箱类型则具有与它们的值不同的同一性
2:基本类型只有值,而装箱类型除了它对应基本类型的所以功能值之外,还有个非功能值:null
3:基本类型通常比装箱类型更节省时间和空间
ComparatornaturalOrder = new Comparator () {@Overridepublic int compare(Integer o1, Integer o2) { return o1 < o2 ? -1 : (o1 == o2 ? 0 : 1);}}; System.out.println(naturalOrder.compare(new Integer(10), new Integer(10)));//结果是1原因:对表达式计算o1 < o2会导致Integer实例被自动拆箱,然后执行表达式o1 == o2,它在两个对象引用上执行同一性比较,如果o1和o2引用表示同一个int值的Integer实例,结果返回false。对装箱类型运用==操作符几乎总是错误的
static Integer i;public static void main(String[] args) { if(i==42) System.out.println("Unbelievable");}//结果java.lang.NullPointerException原因:i是一个Integer,而不是一个int,所有初始值是null当在一项操作中混合使用基本类型和装箱类型时,装箱类型就会自动拆箱。如果null对象引用被自动拆箱,就会得到一个NullPointerException
Long sum=0L;long startTime=new Date().getTime();for(long i=0;i什么时候应该使用装箱类型:
1:作为集合中的元素、键和值
2:在参数化类型中,必须使用装箱类型作为类型参数,因为java不允许使用基本类型
3:在进行反射的方法调用时,必须使用装箱基本类型