Kev*_*vin 5 java type-conversion
对于中级Java程序员来说,这听起来太微不足道了.但在我审查Java基础知识的过程中,发现了一个问题:
为什么缩小转换范围如下:
byte b = 13;
Run Code Online (Sandbox Code Playgroud)
将被允许
int i = 13;
byte b = i;
Run Code Online (Sandbox Code Playgroud)
会被编译器抱怨吗?
Nic*_*rey 10
因为byte b = 13 ;是常数的赋值.它的值在编译时是已知的,因此编译器可以/应该/将会抱怨如果赋值的值会导致溢出(尝试byte b = 123456789 ;看看会发生什么).
一旦将它分配给变量,就会分配一个表达式的值,虽然它可能是不变的,但编译器并不知道.该表达式可能导致溢出,因此编译器发出呜呜声.