8.49 优先使用基本数据类型代替封装对象类型
JDK5后基本数据类型都有一个对应的封装对象类型(boxed primitive),如int对应Integer。两者区别包括:
1.基本数据类型仅有数据值,而封装对象类型可能具有相同的数据值但是却是不同的对象,如:
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值)所包含的元素仅能是封装对象类型,在添加、删除元素时不要使用基本数据类型的值
?
?
?