参数内部和块内部的短/字节有什么区别

时间:2013-01-28 00:15:53

标签: java compiler-construction compiler-optimization short

  

可能重复:
  Eclipse bug? When is a short not a short?

在Java中,我可以像这样分配一个shortbyte内部块:

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
}

为什么编译器有时会想知道数字的界限(至少从常数中),而它似乎在其他地方忘记它?

1 个答案:

答案 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始终被编译器评估为整数文字