5

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

Double[] d = new Double[10];
for (int i = 0; i < d.length; i++)
    d[i] = new Double(d.length - i);

我收到以下警告消息:

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

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

4

2 回答 2

10

解释

您应该将其替换为:

d[i] = Double.valueOf(d.length - i);

从它的Javadoc

已弃用

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

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


笔记

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

那么你的代码就是:

double[] d = new double[10];
for (int i = 0; i < d.length; i++)
    d[i] = d.length - i;

顺便说一句,您应该永远不要省略花括号。即使你的循环只有一行。这是很难找到的错误的常见来源。

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

double[] values = new double[10];
for (int i = 0; i < values.length; i++) {
    values[i] = values.length - i;
}
于 2020-02-02T08:59:57.483 回答
1

从 Java 9 构造函数方法被弃用

已弃用。很少使用这个构造函数。静态工厂valueOf(double)通常是更好的选择,因为它可能会产生明显更好的空间和时间性能。构造一个新分配的 Double 对象,该对象表示原始 double 参数。

所以替换为:

Double.valueOf(d.length - i)
于 2020-02-02T08:58:41.800 回答