Pra*_*shi 4 java ternary-operator nullpointerexception
NullPointerException即使我明确检查列表的值是否为,我的三元运算符也将引发null。但是,如果我在三元运算符周围添加括号,则我的代码将起作用。
不带括号的代码(引发异常):
final List<String> listData = null;
System.out.println("Insert new data (Created Monitorings) : " +
listData != null ? listData.size() : 0);
Run Code Online (Sandbox Code Playgroud)
带括号的代码(可以正常工作):
final List<String> listData = null;
System.out.println("Insert new data (Created Monitorings) : " +
(listData != null ? listData.size() : 0));
Run Code Online (Sandbox Code Playgroud)
有人可以解释它是如何工作的。
这与运算符的优先级有关:字符串的+优先级比后面的三元运算符高得多。
因此,您的第一个片段实际上是这样做的:
( "Insert new data (Created Monitorings) : " + listData ) != null
? listData.size() : 0
Run Code Online (Sandbox Code Playgroud)
含义:您连接一个字符串(带有null listData),然后将其与null进行比较。显然,连接的字符串不为null。因此,您确实致电listData.size()。这类似于null.size()导致您的NullPointerException的原因。
您正在将错误的事物与null 进行比较!在第二个代码段中,(括号)确保将三元运算的结果添加到您的字符串中。