91S*_*Sky 24 java if-statement conditional-operator
这段代码工作正常:-
Integer nullInt = null;
if (1 <= 3) {
Integer secondNull = nullInt;
} else {
Integer secondNull = -1;
}
System.out.println("done");
Run Code Online (Sandbox Code Playgroud)
但这会引发空指针异常,而 Eclipse 警告需要自动拆箱:-
Integer nullInt = null;
Integer secondNull = 1 <= 3 ? nullInt : -1;
System.out.println("done");
Run Code Online (Sandbox Code Playgroud)
为什么会这样,有人可以指导吗?
Era*_*ran 22
三元条件表达式的类型
1 <= 3 ? nullInt : -1
Run Code Online (Sandbox Code Playgroud)
是int(JLS 包含几个表,根据第二个和第三个操作数的类型描述三元条件运算符的类型)。
因此,当它尝试拆箱nullInt到 an 时int,NullPointerException会抛出 a 。
为了获得 if-else 代码段的行为,您需要编写:
1 <= 3 ? nullInt : Integer.valueOf(-1)
Run Code Online (Sandbox Code Playgroud)
现在表达式的类型将为Integer,因此不会发生拆箱。