为什么我可以将float传递给Double的构造函数?

Thi*_*ndu 1 java floating-point double

在下面的代码中,我们构建了一些Double来自变量double,floatString.但是,根据文档,Double只有构造函数接受doubleString- 而不是float.那么这段代码是如何编译的呢?

Double d1 = new Double(2.5);
Double d2 = new Double(2.5f); //Why can I pass a float here?
Double d3 = new Double("2.5");
Run Code Online (Sandbox Code Playgroud)

Ale*_*lor 6

因为a float通常可以转换为a double而不会丢失精度,因此float可以自动扩展为a double.有关Java将自动扩展的类型的信息,请参阅扩展原始转换.

关于float/ double转换的链接文档中注明了一个例外:

从加宽原语转换floatdoublestrictfp可能会失去约转换后的值的总大小的信息.