Cra*_*acs 6 java java-ee implicit-conversion
使用以下代码:
Float a = 1.2;
Run Code Online (Sandbox Code Playgroud)
有一个错误,因为它将十进制作为double值,并且double是一个更大的数据类型float.
现在,它将整数作为默认int类型.那么,为什么以下代码没有给出任何错误?
Byte b = 20;
Run Code Online (Sandbox Code Playgroud)
编译器非常聪明,int可以确定20(一个值)的位表示可以适合于a byte而不会丢失数据.从Java语言规范§5.1.3开始:
从A基本收缩转换
double到float由IEEE 754的舍入规则支配(§4.2.4).这种转换可能会失去精度,但也会失去范围,导致float非零的零double和float有限双的无穷大.甲doubleNaN被转换成float的NaN和double无穷被转换成相同的签名float无穷大.将有符号整数缩小到整数类型T只会丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数.除了可能丢失有关数值大小的信息之外,这可能导致结果值的符号与输入值的符号不同.
另见此主题.