三元运算符在打印时会产生意外结果

时间:2015-11-13 07:34:44

标签: java string return-value

今天我遇到了一个三元运算符的奇怪问题,我无法解读。我可以通过在括号之间插入来处理这个问题,但是如果你能告诉这个行为的解释我会很感激。

以此示例代码:

public class Test {
    public static void main(String[] args) {
        Plant plant = new Plant();
        System.out.println("{\"name\":\""+plant.getName()!=null?plant.getName():plant.getId()+"\"}");
        System.out.println("{\"name\":\""+(plant.getName()!=null?plant.getName():plant.getId())+"\"}");
    }
}
class Plant {
    public String getId() {
        return "Hello";
    }
    public String getName() {
        return null;
    }
}

结果是:

null

{"name":"Hello"}

我无法释放第一个'null'。在世界上我如何获得第一个syso语句的null?

感谢。

2 个答案:

答案 0 :(得分:4)

type

评估为:

"{\"name\":\""+plant.getName()!=null?plant.getName():plant.getId()+"\"}"
即使("{\"name\":\""+plant.getName()!=null)?plant.getName():plant.getId()+"\"}" 为空,

"{\"name\":\""+plant.getName()也不为空。因此,plant.getName()由三元条件运算符返回,并且它为空,因此打印plant.getName()

答案 1 :(得分:1)

您的getName()方法会返回null

所以当你打电话

System.out.println("{\"name\":\""+plant.getName()!=null?plant.getName():plant.getId()+"\"}");

"name": + null不是null

因此它打印plant.getName() <{1}}