有 Java 编程相关的问题?

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

在Java works中返回null作为基元类型。为什么?

为什么javac用于:

int xx() {
      return true ? null : 0;   
}

返回

int xx();
   0: aconst_null
   1: checkcast     #2   // java/lang/Integer
   4: invokevirtual #3   // java/lang/Integer.intValue:()I
   7: ireturn

请注意,我的xx返回int-一种原语类型。为什么javac不服从并试图返回引用类型-Integerjava.lang.Integer.intValue()


共 (2) 个答案

  1. # 1 楼答案

    Java有一个特性,java.lang.Integer的实例会自动取消绑定(通过插入Integer.intValue()调用)

    如果您试图在方法中返回null,编译器会认为您有一个java.lang.Integer的实例。然后将此java.lang.Integer拆封并返回

  2. # 2 楼答案

    这是因为一个名为“自动装箱”的功能

    您正在尝试返回null-基元int的值不能为null,但类Integer可以。Java自动在原语(int,char,bool等)及其类(Integer,Character,Boolean)之间进行装箱和拆箱,而无需您的干预,以适应引用类型的行为