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

标签 java operator-keyword ternary

尊敬的 Java 大师们!

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

例子:

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

输出是“D”,但我期望是“BC”。

我怀疑它是这样工作的,因为运算符(operator)的优先级,但我不确定,对于上述情况,我们究竟是如何得到“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");

关于java - 连接三元运算符的 2 个结果时,字符串连接在 Java 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117029/

相关文章:

java - return 语句中带有常量变量的三元运算符。返回 a>b?a :b + 1; or return 1 + a>b? a:b;

java - 编辑 JSON 字符串的最有效方法

java - Selenium Webdriver - 在 CSS 定位器中使用存储的字符串

java - Spock Power Mock 不返回 .thenAnswer { } 方法中指定的值

flutter - Dart Flutter 中的 "!"是什么?

c++ - 为什么派生类调用基类运算符而不是自己的运算符

r - 三元图和填充轮廓

javascript - 在 D3 中使用三元

java - JMeter4.0 - 采样器请求插件不获取更新的计数器值

c++ - 在 C++11 中对派生类使用基类运算符