gpt4 book ai didi

Java 原语和原语包装器

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:55 26 4
gpt4 key购买 nike

我正在尝试了解 Java 原语和包装器的工作原理。让我们考虑以下示例。

Integer sum = 0;
for(int i = 0; i < 10000; ++i) {
sum += i;
}

由于 Integer 是不可变的并且是非原始的,因此语句 sum += i 将被编译为以下内容

sum =  new Integer(sum.intValue() + i).

这将创建大约 10000 个 Integer 对象(每次调用新的 Integer)以及将 Integer 拆箱为 int 的 sum.intValue() 成本。

我说得对吗?

最佳答案

不完全是。事实上:

    sum += i;

相当于

    sum = Integer.valueOf(sum.intValue() + i);

对于小整数值,Integer.valueOf(int) 将返回缓存的 Integer 对象。这意味着您将创建不到 10,000 个新的 Integer 对象。

但“小”通常表示 -128 到 +127 (IIRC) ...因此差异不会很大。


正如 Louis Wasserman 所指出的,对象分配是廉价的,“英年早逝”的对象的垃圾收集甚至更廉价。尽管如此,您不应在不必要的情况下使用原始包装器,尤其是在这样的代码中。

关于Java 原语和原语包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18502643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com