在连接三元运算符的2个结果时,字符串连接在Java中无法正常工作

亲爱的Java大师!

请你解释一下,为什么串联连接在连接三元运算符的2个结果时在Java中无法正常工作?

例:

String str = null; String x = str != null ? "A" : "B" + str == null ? "C" : "D"; System.out.println(x); 

输出为“D”,但我预计“BC”。

由于操作员的优先考虑,我怀疑它是这样的,但我不确定,关于我们如何在上面的情况下得到“D”。 这种情况下会采用什么计算算法?

它被解释为以下代码:

 String x = str != null ? "A" : ("B" + str == null ? "C" : "D"); 

"B" + str不为空,因此它将被评估为"D"

在OSborn的答案的帮助下,您可以使用此代码执行您期望的操作:

 String x = (str != null ? "A" : "B") + (str == null ? "C" : "D"); 

并且因为你只是将strnull进行比较,并且两个条件语句几乎相同,所以它可以缩短为:

  String x = (str != null ? "AD" : "BC"); 

问题可能是操作的顺序。 您可以通过编写以下内容使其明确:

 String x = (str != null ? "A" : "B") + (str == null ? "C" : "D"); 

"B" + str == null ? "C" "B" + str == null ? "C" ,字符串连接在评估条件表达式之前首先被评估

我想你是有意的

 String x = (str != null ? "A" : "B") + (str == null ? "C" : "D");