Java 连接字符串中的条件运算符
我想知道为什么下面的程序会抛出一个NPEJava 连接字符串中的条件运算符,java,Java,我想知道为什么下面的程序会抛出一个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 =
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());
}
没有。这当然是一个优先问题,我很好奇串联在内部是如何工作的。这是理解的重要性的一个例子 您需要括号,否则会被解释为:
String test = ("test" + testInteger) == null ? "(null)" : testInteger.toString();
有关运算符及其优先级的列表,请参见。还要注意该页顶部的警告:
注意:当甚至可能出现混淆时,请使用显式括号
如果没有支架,它可以有效地做到这一点:
String test=(“test”+testInteger)==null?“(null)”:testInteger.toString()代码>
这将导致NPE。因为它的评估为“test”+testInteger
(即“testnull”
,因此不为null),这意味着您的testInteger==null
测试将永远不会返回true。我认为您需要添加括号。下面是一个生成“”的工作示例
public static String getServiceBaseURL(String protocol, int port, String hostUrl, String baseUrl) {
return protocol + "://" + hostUrl + ((port == 80 || port == 443) ? "" : ":" + port) + baseUrl;
}