有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想知道为什么将原始数据类型(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) 个答案

  1. # 1 楼答案

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

    以下几点应该有用

    System.out.println(add.apply(Long.valueOf(8), Long.valueOf(5)));
    
  2. # 2 楼答案

    因为这个

    Long l = 1; 
    

    意味着将一个int(没有浮动部分的文字数是int)分配给一个Object,这里是一个Long
    Java 5中引入的自动装箱功能不允许从int装箱到Integer以外的其他内容。所以Long不能被接受为目标类型,但这个类型是:

    Integer i = 1;  
    

    在工作示例中,将int转换为long:(long)8
    因此,编译器可以完美地将long框到Long