从 Java 5 开始,我们对原始类型进行了装箱/拆箱,以便int
被包裹成java.lang.Integer
,等等。
我最近看到了很多新的 Java 项目(确实需要至少版本 5(如果不是 6)的 JREint
而不是java.lang.Integer
,尽管使用后者更方便,因为它有一些帮助方法可以转换为long
价值观等。
为什么要做一些still在Java中使用原始类型?有什么实实在在的好处吗?
在约书亚·布洛赫的书中有效的Java https://rads.stackoverflow.com/amzn/click/com/0321356683,第 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()
相比之下相当冗长==
)
对于比比奇普:
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
EDIT Why does (3) return true
and (4) return false
?
因为它们是两个不同的对象。最接近零的 256 个整数 [-128; 127] 由 JVM 缓存,因此它们返回相同的对象。但是,超出该范围,它们不会被缓存,因此会创建一个新对象。为了使事情变得更加复杂,JLS 要求at least256 个享元被缓存。 JVM 实现者可以根据需要添加更多,这意味着这可以在缓存最近的 1024 个并且所有这些都返回 true 的系统上运行...#awkward
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)