如何解决为什么人们仍然在 Java 中使用原始类型??
在 Joshua Bloch 的 EffectiveJava 的第 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));
}
}
结果是:
false
false
true
false
编辑
因为它们是两个不同的对象。最接近零的 256 个整数 [-128; 127] 被 JVM
缓存,因此它们返回相同的对象。但是,超出该范围,它们不会被缓存,因此会创建一个新对象。为了让事情变得更复杂,JLS 要求 至少 缓存 256
个享元。JVM 实现者可以根据需要添加更多内容,这意味着这可以在缓存最近的 1024 并且所有这些都返回 true 的系统上运行…#awkward
解决方法
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。