Java嵌套的If-else简写

时间:2018-01-29 19:54:51

标签: java

if (getNo() != null ? !compareNo(getNo(), b.getNo()) : getNo() != null) {
  return 100;
}

假设getNo()不是null,这是否意味着如果return 100评估为!compareNo(getNo(), b.getNo())true会运行?

最后一个表达式(在:)之后会发生什么

1 个答案:

答案 0 :(得分:1)

真是一团糟。让我重构一下,这样我就可以看到发生了什么:

if (getNo() != null ? !compareNo(getNo(), b.getNo()) : getNo() != null) 
{
  return 100;
}

相同
Boolean mainCondition = getNo() != null ? !compareNo(getNo(), b.getNo()) : getNo() != null;
if (mainCondition) 
{
  return 100;
}

相同
Boolean mainCondition;
if (getNo() != null) {
  mainCondition = !compareNo(getNo(), b.getNo());
} else {
  mainCondition = getNo() != null;
}
if (mainCondition) 
{
  return 100;
}

但如果getNo()null,那么我们会发现自己处于else条件,这会将mainCondition设置为false,因此我们不会{ {1}},即更简单的方法是:

return

if (getNo() != null) {
  if (!compareNo(getNo(), b.getNo())) 
  {
    return 100;
  }
}

答案是肯定的:如果if (getNo() != null && !compareNo(getNo(), b.getNo())) { return 100; } 为真,那么原始陈述将返回!compareNo(getNo(), b.getNo())

至于100之后的部分会发生什么情况,除非:为空,否则不会对其进行评估,但如果getNo()确实是getNo(),那么我们已经知道结果,所以把它包含在那里是多余的。