字符串中的三元运算符
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
.
每当您使用三元运算符时,请务必使用 ( 和 ) 以确保您应用到等式的正确部分。
我在字符串中嵌入了一个三元运算符,如下所示:
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
.
每当您使用三元运算符时,请务必使用 ( 和 ) 以确保您应用到等式的正确部分。