当前位置: 首页 > 面试题库 >

串联2个三进制运算符的结果时,字符串串联在Java中无法正常工作

陶博赡
2023-03-14
问题内容

尊敬的Java专家!

您能否解释一下,为什么在串联2个三进制运算符的结果时String串联不能在Java中正常工作?

例:

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

输出为“ D”,但我希望为“ BC”。

由于运营商的优先考虑,我怀疑它的工作原理是这样,但是我不确定在上述情况下我们究竟如何得到“ D”。在这种情况下会发生什么计算算法?


问题答案:

它被解释为以下代码:

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

"B" + str 不为null,因此将被评估为 "D"

借助OSborn的答案,您可以使用以下代码执行期望的操作:

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

并且由于您只是与进行比较strnull并且两个条件语句几乎相同,因此可以将其缩短为:

 String x = (str != null ? "AD" : "BC");


 类似资料:
  • 本文向大家介绍通过+(字符串串联)运算符进行字符串串联。,包括了通过+(字符串串联)运算符进行字符串串联。的使用技巧和注意事项,需要的朋友参考一下 您可以使用Java的“ +”运算符来连接字符串。 示例 输出结果

  • 问题内容: 我对String串联感到困惑。 输出为: 50abc20 50abc1010 我想知道为什么在两种情况下都将 20 + 30 加在一起,但是 10 + 10 需要加上括号(s1)而不是串联到String(s2)。请在此处说明String运算符的工作方式。 问题答案: 加法保持关联。以第一种情况 在第二种情况下:

  • 问题内容: 嗨,我只是想知道为什么这段代码(至少对我来说)产生错误的结果。 好吧,我可能在这里错了 我猜想,如果paperType等于“ Bond”,则说明为“ Paper:Bond”,如果paperType不等于“ Bond”,则说明为“ Paper:Other”。 但是,当我运行这段代码时,结果描述是“ Bond”还是“ Other”,让我想知道字符串“ Paper:”去了哪里??? 问题答案

  • 问题内容: 假设字符串a和b: 在幕后,他们是同一回事吗? 这里将concat反编译为参考。我也希望能够反编译该+运算符,以查看其作用。 问题答案: 不,不是。 首先,语义上略有不同。如果a是null,则抛出一个,但a+=b将把原来的值a就好像它是null。此外,该方法仅接受值,而+操作员会将参数无提示地转换为String(使用对象的方法)。因此,该concat()方法在接受方面更加严格。 要深入

  • 问题内容: 在C ++中,创建多行字符串的最佳规范方法是创建相邻字符串,并让编译器在编译时将它们连接起来,如下所示: 在Java中,我唯一知道的方法是串联: 问题是,这是在运行时生成单个字符串,还是Java实际上也在编译时进行连接?出现此问题的原因是由于以下行为: 问题答案: String s3 = “a”; s3 += “bc”; 与: 因此,它创建了一个新实例。 您甚至可以尝试:

  • 问题内容: 为什么下面的工作?我希望会被抛出。 问题答案: 为什么必须起作用? 在JLS 5,第15.18.1.1节 JLS 8§15.18.1 “字符串连接运算符+” ,导致JLS 8,§5.1.11 “字符串转换”,要求该操作无故障成功: …现在只需要考虑参考值。如果引用为null,则将其转换为字符串“ null”(四个ASCII字符n,u,l,l)。否则,转换的执行就好像是通过调用不带参数的