代码之家  ›  专栏  ›  技术社区  ›  ecdhe

为什么将基元类型强制转换为引用类型会导致编译错误?[副本]

  •  1
  • ecdhe  · 技术社区  · 6 年前

    我想知道为什么要强制转换原始数据类型( int 例如)引用类型( Long 例如)不编译?

    BinaryOperator<Long> add = (x, y) -> x + y;
    System.out.println(add.apply((Long)8, (Long)5)); //this line does not compile
    System.out.println(add.apply((long)8, (long)5)); // this line does compile
    

    我很乐意得到一些详细的答案。非常感谢。

    2 回复  |  直到 6 年前
        1
  •  4
  •   davidxxx    6 年前

    因为这个

    Long l = 1; 
    

    意味着分配 int (无浮动部分的文字编号为 内景 )至 Object ,此处a Long
    Java 5中引入的自动装箱功能不允许从 内景 除了 Integer 。所以 长的 不可接受为目标类型,但此类型应为:

    Integer i = 1;  
    

    在工作示例中,将int转换为long: (long)8
    因此编译器可以完美地装箱 long 长的

        2
  •  0
  •   casillas    6 年前

    这个 long 是基本数据类型,但 Long 是(包装器)类。

    以下操作应该有效。

    System.out.println(add.apply(Long.valueOf(8), Long.valueOf(5)));