java - 三元运算符产生一个字符串 - 我正在连接这些短语。看不懂解释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
解决方案
由于运算符优先级规则,您的复合三元实际上是这样评估的:
loggerKey != null ? loggerKey : ("" + loggerDescription != null ?
loggerDescription : "")
也就是说,虽然vas
将分配描述,但它是第一个外部三元语句的第二个 else 谓词的一部分,因此被跳过,因为键srini
不为空。
您在每个单独的三元表达式周围放置括号的解决方案是正确的,并且是解决问题的一种方法。
推荐阅读
- r - 如何替换包含特定字符串 r 的列名
- apache-spark - Spark Driver 监督工作不可靠
- spring-boot - 如何通过 JMX 将 SpringBoot 应用程序中的 Kafka 指标公开给 Prometheus?
- pandas - 根据最近的日期时间条件删除重复项
- arrays - 检查 Swift 中的可选数组是否为空
- django - 如何在 Django 中序列化具有多个对象的 MethodField?
- reactjs - 存储的 setInterval 在基于 React JS 类的组件中返回为未定义
- java - 如何替换JSON的最后一个索引项
- python - 在三元散点图上调整坐标轴范围和坐标轴标题位置
- list - 删除 pymongo 集合中的列表项