可能重复:
Eclipse 错误?什么时候短不是短?
在 Java 中,我可以在块内分配
short
或 byte
,如下所示:
short s = 20000;
byte b = 120;
因为 20000 是一个
short
值,而 120 是一个 byte
值,如果我尝试尝试:
short s = 67000;
byte b = 128;
我会收到一个错误,指出它无法从
int
编译到 byte
,其中
byte b = (byte)12232;
甚至不会触发价值可能丢失的警告。在函数调用中,我无论如何都必须强制转换它:
void test(short s){}
test(1) //invalid
test((short)1) //valid
在
return
键入时又没问题了。
short test(){
return 1; //valid
}
为什么编译器有时想要知道数字的界限(至少是常量),而它似乎在其他地方忘记了它?
Java 中的整数数字文字只有两种:
int
(声明为 123
)和 long
(声明为 123L
)。
short s = 1
是允许的,因为它是一个赋值并且允许狭义转换short s = 67000
不起作用,因为您超出了可以用 short
short s = (short)67000
之所以有效,是因为您正在进行强制转换,因此您明确请求类型检查器忽略 67000 超出最大值的事实test(1)
不起作用,因为它是方法调用,不允许窄转换(int -> Short),并且 1
始终被编译器评估为整数文字