编译器非常聪明,可以确定20的位表示(int值)可以适合一个字节,而不会丢失数据.从
Java Language Specification §5.1.3:
A narrowing primitive conversion from double
to float
is governed by the IEEE 754 rounding rules (07001). This conversion can lose precision,but also lose range,resulting in a float
zero from a nonzero double
and a float
infinity from a finite double. A double
NaN is converted to a float
NaN and a double
infinity is converted to the same-signed float
infinity.
A narrowing conversion of a signed integer to an integral type T simply discards all but the n lowest order bits,where n is the number of bits used to represent type T. In addition to a possible loss of information about the magnitude of the numeric value,this may cause the sign of the resulting value to differ from the sign of the input value.
另见this thread.