gpt4 book ai didi

java - 运算符优先级 - 算术和条件运算符

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:36 25 4
gpt4 key购买 nike

我想了解为什么下面的代码会抛出空指针异常

import java.util.List;

public class Test {
public static void main(String[] args) {
List<String> names = null;
System.out.println("Result is: " + names == null ? null : names.size());
}
}

最佳答案

问题是您的打印语句被评估为:

System.out.println(("Result is: " + names) == null ? null : names.size());

这是因为 + has more precedence than ?: operator因此,由于字符串 - "Result is null" 不等于 null,评估 names.size() 会抛出 NPE。

请注意,当 null 用于字符串连接时,它会自动转换为 "null"。所以,"Result is: "+ null 不会抛出 NPE。这是根据 JLS - String Conversion :

If the reference is null, it is converted to the string "null" (four ASCII characters n, u, l, l).

要解决此问题,您应该在条件表达式两边添加括号以强制执行更高的优先级:

System.out.println("Result is: " + (names == null ? null : names.size()));

关于java - 运算符优先级 - 算术和条件运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18628256/

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