在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
}
为什么编译器有时会想知道数字的界限(至少从常数中),而它似乎在其他地方忘记它?
答案 0 :(得分:4)
Java中的积分数字文字只有两种:int
(声明为123
)和long
(声明为123L
)。< / p>
short s = 1
是允许的,因为它是一项任务,并且允许进行窄转换short s = 67000
不起作用,因为您超出了short
提出的最大值short s = (short)67000
有效,因为您正在放置一个强制转换,因此您明确要求类型检查器忽略67000超过最大值的事实test(1)
不起作用,因为它是方法调用,不允许进行窄转换(int - &gt; short),1
始终被编译器评估为整数文字