为什么Float有一个允许double作为参数的构造函数,而Double在JAVA中没有一个带有float作为参数的构造函数?

时间:2018-02-03 17:54:07

标签: java

我在JAVA书中读到浮动有3个构造函数(带有args:String / float / double)。虽然Double只有2个构造函数(带有args String / double)。所以我的问题是,为什么Double没有一个以float作为参数的构造函数。

1 个答案:

答案 0 :(得分:4)

你已经在你的问题中说了为什么,但为了清楚起见:

Double(double)如果你传递float就行了,所以不需要Double(float)。这是因为在constructor invocation (JLS§5.3)中,允许widening primitive conversion (JLS§5.1.2)floatdouble是一种扩大的原始转化。

Float(float)如果你传递double 就不会。你得到一个精度不足的警告,因为那是narrowing primitive conversion (JLS§5.1.3)。因此,通过提供明确指出它将失去精度的Float(double)构造函数,API可以编写调用Float构造函数的代码,而double没有警告。 (你可以争辩说,打电话时调用者是否做了明确的(float)演员是否是一件好事,但是......)