我有一个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 答案的讨论。
编辑:我做了一些快速测试。两种投射方式(显式/魔术)具有相同的性能。