字符串中的三元运算符

Ternary Operator in String

我在字符串中嵌入了一个三元运算符,如下所示:

return borderStyle.getThickness() + "|" + 
        borderStyle.getColor()!=null?ColorPersistor.asString(borderStyle.getColor()):"isnull" + "|" + 
                borderStyle.getLineStyle();

令人惊讶的是ColorPersistor.asString(borderStyle.getColor())被执行了。

为什么没有将调用评估为 "isnull" 是否可以在字符串中嵌入三元运算符?

您需要使用括号来确保您想要的操作优先级(另外,我强烈建议更好地格式化它,并为了您自己的可读性而断开和缩进长行)。

按照您编写的方式,使用默认运算符优先级,它的计算结果如下:

 return 
  (borderStyle.getThickness() + "|" + borderStyle.getColor()) !=null ? 
         ColorPersistor.asString(borderStyle.getColor()): 
         ("isnull" + "|" + borderStyle.getLineStyle());

(因为字符串 + 运算符的优先级高于 ?)。 这显然不是你想要的。

三元运算符具有最低Operator Precedeces

之一

这意味着:之前的+操作之后计算

所以实际上你 不是 检查 borderStyle.getColor() 是否不是 null 但你检查

borderStyle.getThickness() + "|" + borderStyle.getColor() 不为空。这不是因为文字字符串 "|" 总是 != null.

每当您使用三元运算符时,请务必使用 ( 和 ) 以确保您应用到等式的正确部分。