Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接字符串中的条件运算符_Java - Fatal编程技术网

Java 连接字符串中的条件运算符

Java 连接字符串中的条件运算符,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 =

我想知道为什么下面的程序会抛出一个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());
}

没有。这当然是一个优先问题,我很好奇串联在内部是如何工作的。

这是理解的重要性的一个例子

您需要括号,否则会被解释为:

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;
}