在约书亚·布洛赫第5项:“避免创建不必要的对象”,他发布了以下代码示例:public static void main(String[] args) {
Long sum = 0L; // uses Long, not long
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);}
它需要43秒才能运行。将长时间带入原始状态使其缩短到6.8秒.如果这说明了为什么我们使用原语。
本土价值平等的缺失也是一个令人关注的问题(.equals()与==)
对于biziclop:class Biziclop {
public static void main(String[] args) {
System.out.println(new Integer(5) == new Integer(5));
System.out.println(new Integer(500) == new Integer(500));
System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
}}
成果如下:false
false
true
false
编辑 为什么(3)返回true和(4)返回false?
因为它们是两个不同的物体。JVM缓存最接近于零的256个整数[-128;127],因此它们为这些整数返回相同的对象。但是,超出了这个范围,就不会缓存它们,因此会创建一个新的对象。为了使事情变得更复杂,JLS要求至少256飞行重量被缓存。JVM实现者可能会添加更多,如果他们愿意,这意味着这可能运行在一个系统,其中最近的1024缓存,并所有他们返回真.#尴尬