使用以下代码:
Float a = 1.2;
有一个错误,因为它将小数作为 double 值,而 double
是比 float
更大的数据类型。
现在,它采用整数作为默认的 int
类型。那么,为什么下面的代码没有给出任何错误?
Byte b = 20;
最佳答案
编译器足够聪明,可以计算出 20 的位表示(int
值)可以装入 byte
而不会丢失数据。来自Java Language Specification §5.1.3 :
A narrowing primitive conversion from
double
tofloat
is governed by the IEEE 754 rounding rules (§4.2.4). This conversion can lose precision, but also lose range, resulting in afloat
zero from a nonzerodouble
and afloat
infinity from a finite double. Adouble
NaN is converted to afloat
NaN and adouble
infinity is converted to the same-signedfloat
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 .
关于Java隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32255812/