字符串中的三元运算符

时间:2015-12-12 14:10:27

标签: java ternary-operator

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

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

令人惊讶ColorPersistor.asString(borderStyle.getColor())已被执行。

为什么呼叫被评估为" isnull"是不是可以在字符串中嵌入三元运算符?

3 个答案:

答案 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