8.49 优先使用基本数据类型代替封装对象类型

JDK5后基本数据类型都有一个对应的封装对象类型(boxed primitive),如int对应Integer。两者区别包括:

1.基本数据类型仅有数据值,而封装对象类型可能具有相同的数据值但是却是不同的对象,如:

int i=42,j=42;
System.out.println(i==j);//打印true

Integer a=Integer.valueOf(42);
Integer b=Integer.valueOf(42);
System.out.println(a==b);//打印false

 

2.封装对象类型具有一个特殊值null,基本数据类型不具有此值

 

3.基本数据类型在计算性能和占用内存上,比封装对象类型更好。

 

基本数据类型和封装对象类型可以自动转换(autoboxing,auto-unboxing),一般情况下,当基本数据类型和封装对象类型进行比较时,封装对象类型会自动转换为基本数据类型,然后才进行比较。频繁转换可能导致性能严重下降,如下:

Long sum = 0L;//注意sum为Long类型
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}

 

以上代码每次计算过程,sum会先转换为long类型然后与i相加(因为i是long类型),计算结果会被转换为Long类型再赋给sum。即每次计算有2次转换过程,导致性能降低。

 

基本原则:

1.不要把基本数据类型和封装对象类型进行频繁比较(如上例的计算操作),否则会严重降低性能

2.注意当对两个封装对象类型进行“==”操作时,比较的是内存里两个对象是否相同,而不是比较对象拥有的数据值。应使用equals(), compareTo()比较封装对象类型的数据值

3.Collection,Map(特别是key值)所包含的元素仅能是封装对象类型,在添加、删除元素时不要使用基本数据类型的值

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值