不推荐使用的新Double(double)替代项

问题描述 投票:-1回答:2

我正在关注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)已被弃用

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

java wrapper deprecated
2个回答
0
投票

说明

您应将其替换为:

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;
}

0
投票

从Java 9构造函数方法为Deprecated

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

因此替换为:

Double.valueOf(d.length - i)
© www.soinside.com 2019 - 2024. All rights reserved.