我想知道为什么以下程序抛出一个NPE
public static void main(String[] args) { Integer testInteger = null; String test = "test" + testInteger == null ? "(null)" : testInteger.toString(); }
而这个
public static void main(String[] args) { Integer testInteger = null; String test = "test" + (testInteger == null ? "(null)" : testInteger.toString()); }
没有.这当然是一个优先问题,我很好奇连接如何工作.
解决方法
这是了解
operator precedence的重要性的一个例子.
您需要括号,否则解释如下:
String test = ("test" + testInteger) == null ? "(null)" : testInteger.toString();
请参阅here了解操作符列表及其优先级.还要注意该页面顶部的警告:
Note: Use explicit parentheses when there is even the possibility of confusion.