我有一个Object obj
我知道实际上是一个long
. 在一些数学代码中,我需要它作为double
.
直接将其转换为双倍是否安全?
double x = (double)obj;
或者我应该先把它投长,然后加倍。
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 答案的讨论。
编辑:我做了一些快速测试。两种投射方式(显式/魔术)具有相同的性能。