今天我遇到了一个三元运算符的奇怪问题,我无法解读。我可以通过在括号之间插入来处理这个问题,但是如果你能告诉这个行为的解释我会很感激。
以此示例代码:
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?
感谢。
答案 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}}