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

时间:2018-06-27 00:45:31

标签: java floating-point double

在下面的代码中,我从Doubledoublefloat构造一些String变量。但是,根据文档,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");

2 个答案:

答案 0 :(得分:6)

由于通常可以将float转换为double而不会失去精度,因此float可以自动扩大double。有关Java将自动扩展哪些类型的信息,请参见Widening Primitive Conversion

链接的文档中有一个关于float / double转换的例外情况:

  

floatdouble的原始转换范围不断扩大,   strictfp可能会丢失有关   转换后的值。

答案 1 :(得分:1)

有两种类型的铸造,加宽铸造(隐式)和缩窄铸造(显式)

Wilding->将较低的范围转换为较大的范围

缩小->将较大范围转换为较小范围(这会导致数据丢失)

因此可以将float类型转换为Double,找到图片视图enter image description here