gpt4 book ai didi

java - java 中的 Long 拆箱

转载 作者:行者123 更新时间:2023-12-02 00:38:23 26 4
gpt4 key购买 nike

在一些代码中我看到了这个:

private void compute(Long a, Long b, Long c) {
long result = a-(b+c);
...

结果存储在一个原始的long而不是与其操作数对应的Long对象中似乎有点奇怪。

是否有任何理由将结果存储为原语?

最佳答案

It seems a bit strange that the result is stored in a primitive long instead of a Long object corresponding to its operands.

不,“奇怪”的是您可以在 Long 对象上使用 +- 运算符。在 Java 5 之前,这可能是一个语法错误。然后引入了自动装箱/拆箱。您在此代码中看到的是 autounboxing :运算符需要基元,因此编译器会自动在对象上插入对 longValue() 的调用。然后对原始 long 值执行算术,结果也是一个 long,可以存储而无需对变量进行进一步转换。

至于为什么代码会这样做,真正的问题是为什么有人会使用Long类型而不是long。可能的原因:

  • 这些值来自某些提供值的库/API。
  • 值存储在集合(ListMap)中,集合不能容纳基元。
  • 草率或 cargo cult programming .
  • 需要具有 null 值的能力,例如表示数据不可用或未初始化。

请注意,Long 能够保存 null 值,这意味着计算(或更具体地说,longValue() 调用由编译器)可能会因 NullPointerException 失败 - 代码应该以某种方式处理这种可能性。

关于java - java 中的 Long 拆箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855238/

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