首页 > 解决方案 > 三元运算符产生一个字符串 - 我正在连接这些短语。看不懂解释java

问题描述

String loggerKey = "srini";
String loggerDescription =  "vas";
System.out.println(loggerKey != null?loggerKey:""+loggerDescription != null?loggerDescription:"");

上面的代码给了我结果斯里尼,我期待斯里尼瓦斯。但是如果我将代码修改为以下方式,我将把 Srinivas 作为输出。

String loggerKey = "srini";
String loggerDescription =  "vas";
System.out.println((loggerKey != null?loggerKey:"")+(loggerDescription != null?loggerDescription:""));

java如何解释第一个片段?这就是我所期待的。

String loggerKey = "srini";
String loggerDescription =  "vas";
System.out.println((loggerKey != null?loggerKey:"")+(loggerDescription != null?loggerDescription:""));

String loggerKey = "srini";
String loggerDescription =  "vas";
System.out.println(loggerKey != null?loggerKey:""+loggerDescription != null?loggerDescription:"");

输出: srinivas

标签: java

解决方案


由于运算符优先级规则,您的复合三元实际上是这样评估的:

loggerKey != null ? loggerKey : ("" + loggerDescription != null ?
    loggerDescription : "")

也就是说,虽然vas将分配描述,但它是第一个外部三元语句的第二个 else 谓词的一部分,因此被跳过,因为键srini不为空。

您在每个单独的三元表达式周围放置括号的解决方案是正确的,并且是解决问题的一种方法。


推荐阅读