整型转换为长整型时出现解析错误

4
  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)
      }   
    } 

测试用例 - 1: int - long 正常工作

测试用例 - 2: 将 int 转换为 Long 抛出异常

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


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Bilbo Baggins
2个回答

10

当你进行

  testCase_1(a); 

您正在传递一个int而不是一个long,会发生扩展原始类型转换

在第二种情况中

testCase_2(a);  

你不能将原始类型转换为对象。自动装箱/拆箱不起作用,因为Long不是int的包装器。


3
调用testCase_1(a)时,a会自动从int转换为longint字面值与long完全兼容(反之则不然),因为int类型完全适合long类型。这就是为什么第一个语句可以编译成功的原因。
但是,当调用testCase_2(a)时,您正在尝试将int变量自动转换(强制转换或自动装箱)为Long。这里不会发生自动装箱,也无法进行强制转换,这就是编译器抛出错误的原因。
如果您执行以下操作:
testCase_2(Long.valueOf(a));

如果当时一切都顺利的话,那就好了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接