您可以阅读JLS
5.2分配转换
常量的编译时范围缩小意味着代码如下:
byte theAnswer = 42;
被允许。如果不进行缩小,则整数文字42具有int类型的事实意味着将需要强制转换为字节:
byte theAnswer = (byte)42; // cast is permitted but not required
如果表达式的类型不能通过赋值上下文中允许的转换转换为变量的类型,则会发生编译时错误。
如果变量的类型为float或double,则将值集转换(第5.1.13节)应用于值v
JLS#3.10.2。浮点文字
如果浮点文字后缀为ASCII字母F或f,则其类型为float。否则,其类型为double,并且可以选择在其后缀ASCII字母D或d
5.1.2。扩大原始转换
从double到float的原始转换变窄由IEEE
754舍入规则(第4.2.4节)控制。这种转换可能会失去精度,但也会失去范围,导致非零双精度浮点为零,而有限双精度浮点为无穷大。双精度NaN转换为浮点型NaN,双精度无穷大转换为相同符号的浮点无穷大。
我希望以上能澄清您的疑问。



