gpt4 book ai didi

java - 为什么三元运算符在自动拆箱时会抛出 NPE?

转载 作者:行者123 更新时间:2023-12-02 10:05:49 27 4
gpt4 key购买 nike

在下面的测试中,getDummyAge()不应评估方法,因为 testage变量始终是 null .

public class IntegerTest {
@Test
public void intergerTestFailure() {
Integer testage = null;
Integer age = (testage != null) ? getDummyAge() : testage;
}

private int getDummyAge() {
return 0;
}
}

虽然这会引发异常:

java.lang.NullPointerException at my.IntegerTest.intergerTestFailure(IntegerTest.java:18) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566)

这是jdk错误吗?

最佳答案

Integer age = (testage != null) ? getDummyAge() : testage;

相当于

Integer age = Integer.valueOf((testage != null) ? getDummyAge().intValue() : testage);

因为不同类型的数字第二和第三操作数经历二进制数字提升;条件运算符的结果是 int,然后必须将其装箱回 Integer 进行赋值。

这是指定的。

如果您想避免 NPE,请明确地框定 int:

Integer age = (testage != null) ? Integer.valueOf(getDummyAge()) : testage;

装箱的相同类型的数字操作数不会被拆箱。

关于java - 为什么三元运算符在自动拆箱时会抛出 NPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55342531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com