【发布时间】:2012-12-13 08:26:44
【问题描述】:
我有一个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 的讨论。
编辑:我做了一些快速测试。两种投射方式(显式/魔术)具有相同的性能。
【问题讨论】:
-
“我有一个
Object obj,我知道它实际上是一个long”。不可能。 -
我的原始代码是
double x = (double)(long)obj;,它似乎工作正常。我还没有尝试过其他版本。我只是想知道什么是最好的方法,因为双重演员对我来说似乎没有必要。我现在知道我的Object实际上是Number这就是演员不会失败的原因。 -
请不要发布额外的
parseDouble答案。无用的解析只会扼杀性能。
标签: java casting numbers double long-integer