我正在关注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)已被弃用
我相信警告消息告诉我要替换构造函数的使用,因为它已被弃用,所以我应该用它替换什么?
您应将其替换为:
d[i] = Double.valueOf(d.length - i);
从其Javadoc:
不推荐使用。
很少使用此构造函数。通常,静态工厂
valueOf(double)
是更好的选择,因为它可能产生明显更好的时空性能。
通常,valueOf
不必总是返回new实例。它可以利用内部缓存并重新使用之前已经创建的值,从而使其速度更快。例如,如果您创建数百个1.0
。
首先有没有特定原因要使用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;
}
从Java 9构造函数方法为Deprecated
已弃用。很少适合使用此构造函数。静态工厂
valueOf(double)
通常是更好的选择,因为它可能会产生明显更好的空间和时间性能。构造一个新分配的Double对象,该对象表示原始double参数。
因此替换为:
Double.valueOf(d.length - i)