人们为什么仍然在Java中使用原始类型?
从Java 5开始,我们已经对原始类型进行装箱/拆箱,因此将int
其包装为java.lang.Integer
,依此类推。
我最近看到许多新的Java项目(肯定要求JRE的版本至少为5,如果不是6的话)正在使用int而不是java.lang.Integer
,尽管使用后者要方便得多,因为它具有一些用于转换的辅助方法到long的值等。
为什么有些人仍然在Java中使用原始类型?有什么切实的好处吗?
回答:
在Joshua Bloch的有效Java条款 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秒。将Long引入原语可将其缩短至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));
}
}
结果是:
falsefalse
true
false
编辑 为什么(3)返回true
而(4)返回false
?
因为它们是两个不同的对象。最接近零的256个整数[-128; 127]由JVM缓存,因此它们返回相同的对象。但是,超出该范围时,不会缓存它们,因此将创建一个新对象。为了使事情变得更复杂,JLS要求至少缓存256个flyweight。JVM实现者可以根据需要添加更多内容,这意味着它可以在缓存了最近的1024个并且都返回true的系统上运行… #awkward
以上是 人们为什么仍然在Java中使用原始类型? 的全部内容, 来源链接: utcz.com/qa/415870.html