gpt4 book ai didi

java: 三元运算符中的奇怪 NullPointerException (?:)

转载 作者:搜寻专家 更新时间:2023-10-30 21:21:02 24 4
gpt4 key购买 nike

请考虑以下代码片段:

private static void doSomething(Double avg, Double min, Double sd) {
final Double testMin;
if (avg != null) {
testMin = Math.max(min, avg - 3 * sd);
} else {
testMin = min;
}
System.out.println("testMin=" + testMin);

final Double verwachtMin = avg != null ? Math.max(min, avg - 3 * sd) : min;
System.out.println("verwachtMin=" + verwachtMin);
}

据我所知(以及我的 IDE 可以告诉我的),变量 testMinverwachtMin 应该是等价的。

如您所料,我宁愿写最后 2 行而不是前 7 行。但是,当我将 3 个空值传递给此方法时,我在计算 verwachtMin 时遇到 NPE > 变量。

有谁知道这是怎么发生的?三元运算符是否计算第二部分,即使条件不是 true

(Java 版本 1.6.0_21)

最佳答案

尝试:

final Double verwachtMin = avg != null ? new Double(Math.max(min, avg - 3 * sd)) : min;

final Double verwachtMin = avg != null ? Double.valueOf(Math.max(min, avg - 3 * sd)) : min;

三元运算符的交替边的类型是doubleDouble,这意味着Double被拆箱到 double,然后在分配时我们有一个从 doubleDouble 的装箱。如果 min 的值为 null 则拆箱 NPE。

关于java: 三元运算符中的奇怪 NullPointerException (?:),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5246776/

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