我在JAVA书中读到浮动有3个构造函数(带有args:String / float / double)。虽然Double只有2个构造函数(带有args String / double)。所以我的问题是,为什么Double没有一个以float作为参数的构造函数。
答案 0 :(得分:4)
我想你已经在你的问题中说了为什么,但为了清楚起见:
Double(double)
如果你传递float
就行了,所以不需要Double(float)
。这是因为在constructor invocation (JLS§5.3)中,允许widening primitive conversion (JLS§5.1.2)。 float
到double
是一种扩大的原始转化。
但Float(float)
如果你传递double
, 就不会。你得到一个精度不足的警告,因为那是narrowing primitive conversion (JLS§5.1.3)。因此,通过提供明确指出它将失去精度的Float(double)
构造函数,API可以编写调用Float
构造函数的代码,而double
没有警告。 (你可以争辩说,打电话时调用者是否做了明确的(float)
演员是否是一件好事,但是......)