为了账号安全,请及时绑定邮箱和手机立即绑定

为什么人们仍然在Java中使用原语类型?

为什么人们仍然在Java中使用原语类型?

小唯快跑啊 2019-07-15 09:54:35
为什么人们仍然在Java中使用原语类型?从Java 5开始,我们对原始类型进行了装箱/取消装箱,以便int被包装成java.lang.Integer等等。我最近看到了许多新的Java项目(一定需要至少版本5(如果不是6)的JRE。int而不是java.lang.Integer,尽管使用后者要方便得多,因为它有一些用于转换为long价值观等为什么仍然在Java中使用原语类型?是否有任何实际的好处?
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

在约书亚·布洛赫有效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秒才能运行。将长时间带入原始状态使其缩短到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缓存,并所有他们返回真.#尴尬


查看完整回答
反对 回复 2019-07-15
?
白板的微信

TA贡献1883条经验 获得超3个赞

自动拳击会导致难以识别NPEs。

Integer in = null;......int i = in; // NPE at runtime

在大多数情况下,空赋值为in比上面要明显得多。


查看完整回答
反对 回复 2019-07-15
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

原始类型:

int x = 1000;int y = 1000;

现在评估:

x == y

它是true..没什么好奇怪的。现在尝试装箱类型:

Integer x = 1000;Integer y = 1000;

现在评估:

x == y

它是false..可能吧。取决于运行时。这理由够吗?


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 622 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信