gpt4 book ai didi

Java:将(长)对象转换为 double 的多种方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:32 25 4
gpt4 key购买 nike

我有一个 Object obj,我知道它实际上是一个 long。在某些数学代码中,我需要它作为 double

直接将其转换为 double 安全吗?

double x = (double)obj;

或者我应该先将它转换为 long,然后再转换为 double。

double x = (double)(long)obj;

我还找到了另一个(可读性较差的)替代方案:

double x = new Long((long)obj).doubleValue();

这样做的危险/影响是什么?

解决方案总结:

  • obj 是一个 Number 而不是 long
  • Java 6 需要显式转换,例如:double x = ((Number)obj).doubleValue()
  • Java 7 具有有效的魔法:double x = (long)obj

有关 Java6/7 问题的更多详细信息,请参阅 TJ's answer 的讨论.

编辑:我做了一些快速测试。两种转换方式(显式/魔术)具有相同的性能。

最佳答案

当需要一个对象时(在我们的例子中是 Long),Java 中的每个原始数字都会被强制转换为它的装箱类型,并且每个装箱的数字都是 Number 的实例这样做最安全的方法是:

final Object object = 0xdeadbeefL;
final double d = ((Number)object).doubleValue();

这里的危险是,一如既往,我们要转换的 Object 不是 Number 类型,在这种情况下您将得到一个 ClassCastException。您可以检查对象的类型,例如

if(object instanceof Number) ...

如果您想防止类转换异常,而是提供一个默认值,如 0.0。同样,默默地失败的方法并不总是一个好主意。

关于Java:将(长)对象转换为 double 的多种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13855786/

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