三元运算符产生一个字符串-我正在连接这些短语。无法理解java的解释 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:);,java,Java,上面的代码为我提供了结果Srini,我期待Srini。但若我将代码修改为下面的方式,我将得到Srinivas作为输出 String loggerKey=“srini”; 字符串loggerDescription=“vas”; System.out.println((loggerKey!=null?loggerKey:)+(loggerDescription!=null?loggerDescription:); 第一个代码段是如何通过java进行解释的?这就是我所期待的 String logge

上面的代码为我提供了结果Srini,我期待Srini。但若我将代码修改为下面的方式,我将得到Srinivas作为输出

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:“”)
(为内部连接添加了括号)