2

可能重复:
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
}

为什么编译器有时想知道数字的范围(至少从常量中),而它似乎在别处忘记了它?

4

1 回答 1

4

Java 中的整型数字文字只有两种:(int声明为123)和long(声明为123L)。

  • short s = 1是允许的,因为它是一个赋值,并且在那里允许一个狭义的转换
  • short s = 67000不起作用,因为您超出了可以用 a 表示的最大值short
  • short s = (short)67000有效,因为您要进行强制转换,因此您明确要求类型检查器忽略 67000 超过最大值的事实
  • test(1)不起作用,因为它是一个方法调用,不允许窄转换(int -> short)并且1总是被编译器评估为整数文字
于 2013-01-28T00:25:26.333 回答