在连接三元运算符的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");
并且因为你只是将str
与null
进行比较,并且两个条件语句几乎相同,所以它可以缩短为:
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");