我在字符串中嵌入了一个三元运算符,如下所示:
return borderStyle.getThickness() + "|" +
borderStyle.getColor()!=null?ColorPersistor.asString(borderStyle.getColor()):"isnull" + "|" +
borderStyle.getLineStyle();
令人惊讶ColorPersistor.asString(borderStyle.getColor())
已被执行。
为什么呼叫被评估为" isnull"是不是可以在字符串中嵌入三元运算符?
答案 0 :(得分:1)
三元运算符具有最低 Operator Precedeces之一。
这意味着:在之后前面的+操作进行评估。
所以实际上你不检查borderStyle.getColor()
是不是null
但你检查了
borderStyle.getThickness() + "|" + borderStyle.getColor()
不为空。这不是字面字符串"|"
总是!= null
。
每当使用三元运算符时,请务必使用(和)以确保应用于等式的正确部分。
答案 1 :(得分:-1)
您需要使用括号来确保您想要的操作优先级(另外,我强烈建议您更好地格式化它,并为了您自己的可读性而打破和缩进长行。)
使用默认运算符优先级编写它的方式,它的计算结果如下:
return
(borderStyle.getThickness() + "|" + borderStyle.getColor()) !=null ?
ColorPersistor.asString(borderStyle.getColor()):
("isnull" + "|" + borderStyle.getLineStyle());
(因为字符串+
运算符的优先级高于?
。
这显然不是你想要的。
答案 2 :(得分:-1)
我认为这就是你要做的事。
return borderStyle.getThickness() + "|" +
(borderStyle.getColor() != null ? ColorPersistor.asString(borderStyle.getColor()) : "isnull")
+ "|" + borderStyle.getLineStyle();
你正在做的事情的问题是它永远不会等于null。
System.out.println("Hello " + null == null); //false
System.out.println("Hello " + (null == null)); //Hello true