已弃用的 new Double(double) 的替代方案

Len*_*via 9 java wrapper deprecated

我正在关注 Walter Savitch 写的一本名为 Absolute Java 的书。其中的示例程序包含以下几行:

Double[] d = new Double[10];
for (int i = 0; i < d.length; i++)
    d[i] = new Double(d.length - i);
Run Code Online (Sandbox Code Playgroud)

我收到以下警告消息:

警告:[弃用] Double 中的 Double(double) 已弃用

我相信警告消息告诉我替换构造函数的使用,因为它已经被弃用,那么我应该用什么替换它?

Zab*_*uza 17

解释

您应该将其替换为:

d[i] = Double.valueOf(d.length - i);
Run Code Online (Sandbox Code Playgroud)

来自它的Javadoc

已弃用

使用这个构造函数很少是合适的。静态工厂valueOf(double)通常是更好的选择,因为它可能会产生明显更好的空间和时间性能

一般来说,valueOf并不强制总是返回一个实例。它可以利用内部缓存并重用之前创建的值,这使得速度更快。例如,如果您创建数百个1.0.


笔记

Double[]您首先使用 a 有什么具体原因吗?如果没有,double[]那就去吧。与对象包装器相比,原语速度更快,内存开销更少。

那么你的代码就是:

double[] d = new double[10];
for (int i = 0; i < d.length; i++)
    d[i] = d.length - i;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您最好不要省略花括号。即使你的循环只有一行。这是很难发现的错误的常见来源。

另外,你的变量命名也不是很好。什么是d?尝试给它一个反映其实际含义的名称。例如,就像ages它存储人的年龄一样。如果您没有特定的东西,也许可以使用values. 这已经比仅仅好得多了d。特别是因为它是复数,所以很明显它是多个值的数组。

double[] values = new double[10];
for (int i = 0; i < values.length; i++) {
    values[i] = values.length - i;
}
Run Code Online (Sandbox Code Playgroud)

  • @Zabuza,但你可以使用`d[i] = (double) (d.length - i);`,它通过自动装箱隐式使用`valueOf`。 (2认同)