三元运算符产生一个字符串-我正在连接这些短语。无法理解java的解释 String loggerKey=“srini”; 字符串loggerDescription=“vas”; System.out.println(loggerKey!=null?loggerKey:+loggerDescription!=null?loggerDescription:);
上面的代码为我提供了结果Srini,我期待Srini。但若我将代码修改为下面的方式,我将得到Srinivas作为输出三元运算符产生一个字符串-我正在连接这些短语。无法理解java的解释 String loggerKey=“srini”; 字符串loggerDescription=“vas”; System.out.println(loggerKey!=null?loggerKey:+loggerDescription!=null?loggerDescription:);,java,Java,上面的代码为我提供了结果Srini,我期待Srini。但若我将代码修改为下面的方式,我将得到Srinivas作为输出 String loggerKey=“srini”; 字符串loggerDescription=“vas”; System.out.println((loggerKey!=null?loggerKey:)+(loggerDescription!=null?loggerDescription:); 第一个代码段是如何通过java进行解释的?这就是我所期待的 String logge
String loggerKey=“srini”;
字符串loggerDescription=“vas”;
System.out.println((loggerKey!=null?loggerKey:)+(loggerDescription!=null?loggerDescription:);
第一个代码段是如何通过java进行解释的?这就是我所期待的
String loggerKey=“srini”;
字符串loggerDescription=“vas”;
System.out.println((loggerKey!=null?loggerKey:)+(loggerDescription!=null?loggerDescription:);
字符串loggerKey=“srini”;
字符串loggerDescription=“vas”;
System.out.println(loggerKey!=null?loggerKey:+loggerDescription!=null?loggerDescription:);
输出:
srinivas
由于运算符优先级规则,您的复合三元实际上被评估为:
loggerKey != null ? loggerKey : ("" + loggerDescription != null ?
loggerDescription : "")
也就是说,虽然将分配vas
描述,但它是第一个外部三元语句的第二个else谓词的一部分,因此被跳过,因为键srini
不为空
您在每个单独的三元表达式周围放置括号的解决方案是正确的,并且是解决问题的一种方法。可能是这样吗
String loggerKey = "srini";
String loggerDescription = "vas";
System.out.println((loggerKey != null?loggerKey:(""+loggerDescription != null?loggerDescription:""));
将第一个
:
后面的所有表达式作为一个来读取是有意义的。这是因为您提供了()
。在java中,()
被视为一个代码块,并单独处理。
你的逻辑也是错误的。它应该如下所示,您不必使用()
,然后:
System.out.println(loggerKey != null ? loggerDescription != null ? loggerKey +
loggerDescription : loggerKey : loggerDescription != null ? loggerDescription : "");
为了提高可读性,它包括:
System.out.println(loggerKey != null ? (loggerDescription != null ? loggerKey +
loggerDescription : loggerKey) : (loggerDescription != null ? loggerDescription : ""));
java如何划分第一个代码段并始终给我srini,loggerKey!=null?loggerKey:“+loggerDescription!=null?loggerDescription:“”-在此情况下,它考虑的是“”+loggerDescription!=null?loggerDescription:“”作为单语句我建议不要使用嵌套的三元表达式,因为它会使您的代码混淆。这将作为
loggerKey!=无效的loggerKey:((“”+loggerDescription)!=null?loggerDescription:“”)
(为内部连接添加了括号)