Eclipse bug?什么时候短暂不短?

时间:2013-01-12 19:30:38

标签: java eclipse

这是Eclipse中的错误吗?

当声明一个短变量时,编译器将整数文字视为短。

// This works
short five = 5;

然而,当将整数文字作为短参数传递时,它不会做同样的事情,而是生成编译错误:

// The method aMethod(short) in the type Test is not applicable for 
// the arguments (int)
aMethod(5); 

它清楚地知道整数文字何时超出短期范围:

// Type mismatch: cannot convert from int to short
    short notShort = 655254

-

class Test {
    void aMethod(short shortParameter) {
    }

    public static void main(String[] args) {
        // The method aMethod(short) in the type Test is not applicable for 
        // the arguments (int)
        aMethod(5); 

      // the integer literal has to be explicity cast to a short
      aMethod((short)5);

      // Yet here the compiler knows to convert the integer literal to a short
      short five = 5;
      aMethod(five);


      // And knows the range of a short
      // Type mismatch: cannot convert from int to short
        short notShort = 655254
    }
}

参考:Java Primitive Data Types

1 个答案:

答案 0 :(得分:8)

这是因为在调用方法时,只授权原始扩展转换,而不是原始缩小转换(int - > short is)。这在JLS #5.3

中定义
  

方法调用上下文允许使用以下之一:

     
      
  • 身份转换(第5.1.1节)
  •   
  • 扩大原始转换(第5.1.2节)
  •   
  • 扩大参考转换(第5.1.5节)
  •   
  • 拳击转换(§5.1.7),可选地后跟加宽参考转换
  •   
  • 一个拆箱转换(第5.1.8节),可选地后跟一个加宽的基元转换。
  •   

另一方面,在分配的情况下,允许缩小转换率,只要该数字是常数且适合短,cf JLS #5.2

  

如果变量的类型是byte,short或char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示。