gpt4 book ai didi

java - 使用运算符打印语句 ? : causes unexpected output

转载 作者:行者123 更新时间:2023-12-01 07:11:19 25 4
gpt4 key购买 nike

我必须根据 boolean 状态创建输出,例如

  String smily = null;
StringBuffer buff = new StringBuffer();
buff.append(", " + smily == null ? ":)" : ":("); //$NON-NLS-1$

System.out.println(buff.toString());

问题出在字符串创建语句

  ", " + smily == null ? ":)" : ":("

我在2个不同的eclipse环境中测试了它(也可能是2个不同的java版本,这个我没有检查),结果是不同的。

结果 1:

:(

结果 2:

false:(

当然,如果我添加了括号,它就可以工作

 buff.append(", " + (smily == null ? ":)" : ":(")); //$NON-NLS-1$

预期结果:

, :)

有人可以向我解释一下,为什么 java 会这样解释该语句吗?

谢谢

最佳答案

如果您检查运算符优先级(请参阅 this tutorial ),那么您会注意到加法 (+) 位于相等 (==) 之前。换句话说,Java 会先评估 ", "+ smily => ", null" 然后再评估相等性,因此 ", "+ smily == null 的计算结果为 false,因此三元运算符的计算结果为 ":("

顺便说一句:您可以通过在将字符串添加到 StringBuffer 之前不连接字符串来避免这种情况(StringBuffer 的全部目的是使连接更便宜):

String smily = null;
StringBuffer buff = new StringBuffer();
buff.append(", ");
buff.append(smily == null ? ":)" : ":(");

关于java - 使用运算符打印语句 ? : causes unexpected output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13836018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com