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
不听话,并尝试返回引用类型-Integer
(java.lang.Integer.intValue()
)
答案 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
)之间进行装箱和拆箱,以适应引用类型的行为。