【发布时间】:2013-01-11 16:29:59
【问题描述】:
假设我们有一个装箱的 double 变量 foo,我们想将其值乘以 2 并将其存储在另一个装箱的 double 变量 bar 中。从以下几种方式,
方法一:
Double bar = foo * 2;
和,
方法二:
Double bar = Double.valueOf(foo.doubleValue() * 2);
考虑到效率、可读性等,哪一个更可取?还是这些方法的差异如此微不足道,以至于这些方法实际上是等效的?
【问题讨论】:
-
从可读性来看,你可以自己回答问题,从效率来看,我认为这取决于 VM 的实现
-
两者应该是等价的,因为自动装箱被编译成对
valueOf的调用 -
@IanRoberts:虽然经常声称,但这实际上不是必需的。 JLS 仅指定将非 NaN 的原始 double p 转换为“类和 Double 类型的引用 r,使得 r.doubleValue() 计算为 p”。编译器也可以使用例如"new Double(p)" 而不是 "Double.valueOf(p)" 并且仍然遵守 JLS。
-
@jarnbjo 原则上是正确的,但 not in practice.
-
@IanRoberts:所以如果 mishadoff 的车是黑色的,那么所有的车都是黑色的?