在Java中,将null作为原始类型返回即可。为什么?

时间:2019-01-01 18:02:28

标签: java

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 个答案:

答案 0 :(得分:2)

Java具有java.lang.Integer实例自动拆箱的功能(通过插入Integer.intValue()调用)。

如果您尝试在方法中返回null,则编译器会认为您有一个java.lang.Integer的实例。然后将此java.lang.Integer取消装箱并退回。

答案 1 :(得分:1)

发生这种情况是由于称为自动装箱”的功能。

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