基本类型优先于装箱基本类型

原创
2012/12/13 21:12
阅读数 705

java1.5增加了自动装箱(autoboxing)和自动拆箱(auto-unboxing)。

基本类型和装箱基本类型的区别:

1:基本类型只有值,而装箱类型则具有与它们的值不同的同一性

2:基本类型只有值,而装箱类型除了它对应基本类型的所以功能值之外,还有个非功能值:null

3:基本类型通常比装箱类型更节省时间和空间

Comparator<Integer> naturalOrder = new Comparator<Integer>() {

@Override
public 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<Integer.MAX_VALUE;i++){
	sum+=i;
}
long endTime=new Date().getTime();
System.out.println("总时间:"+(endTime-startTime));
//总时间:29079

改成long sum=0L;
//总时间:6724

原因:变量被反复地装箱和拆箱,导致明显的性能下降
什么时候应该使用装箱类型:

1:作为集合中的元素、键和值

2:在参数化类型中,必须使用装箱类型作为类型参数,因为java不允许使用基本类型

3:在进行反射的方法调用时,必须使用装箱基本类型

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部