int to Long解析错误

时间:2016-01-04 09:17:55

标签: java

  class Test{  
    static void testCase_1(long l){System.out.println("Long");}  
    static void testCase_2(Long l){System.out.println("Long");}

    public static void main(String args[]){  
        int a = 30; 

        testCase_1(a);  // Working fine
        testCase_2(a);  // Compilation time error

        //Exception - The method testCase_2(Long) in the type Test is not applicable for the arguments (int)
      }   
    } 
  

testCase - 1:int - 长期正常工作

     

testCase - 2:int to L ong抛出异常

为什么testCase_2()方法抛出编译异常?

2 个答案:

答案 0 :(得分:10)

当你这样做时

  testCase_1(a); 

您正在传递int而不是longwidening primitive conversion正在发生。

在第二种情况下

testCase_2(a);  

您无法将基元转换为对象。自动装箱/取消装箱不起作用,因为Long不是int的包装。

答案 1 :(得分:3)

调用testCase_1(a)时,a会自动从int转换为long

int文字与long完全兼容(反之亦然),因为int类型完全适合 long一个。这就是为什么第一个声明编译得很好。

但是,在调用testCase_2(a)时,您尝试将int变量自动转换(投射或自动装箱)到Long。自动装箱在这里不会发生,也不可能进行铸造,这就是编译器抛出错误的原因。

如果你这样做了:

testCase_2(Long.valueOf(a));

然后一切都会好的。