在实现if else进行比较时,我应该首先使用!=或==

时间:2017-01-11 22:04:34

标签: java android if-statement operators

这一直困扰着我一段时间,我不确定是否有正确答案:

采取这两个陈述

if(foo == bar)
    do this;
else if(foo != bar)
    do that;

if(foo != bar)
    do that;
else if(foo == bar)
    do this;

其中一个是正确的(暂时忘记优化) 我的想法告诉我,答案取决于预期的结果,例如,如果这是在一个循环中运行,并且我预测foo将等于bar的次数比不是,那么第一个就是正确的。

符号之间是否存在效率问题?

5 个答案:

答案 0 :(得分:5)

但这些符号之间是否存在任何效率问题?否。完全没有。喜欢最具可读性的。如果在一个句子中更好地说“如果不是a”,请使用!。否则,不要。

答案 1 :(得分:2)

如果您不想使用If ... else条件,则可以使用三元运算符。

像 result = testStatement? value1:value2;

但是对于嵌套条件,三元运算符看起来非常复杂。

答案 2 :(得分:1)

它确实有很大的不同,优化明智。这取决于你的风格和喜好。你的两个例子都有同样的影响。

答案 3 :(得分:1)

为什么不这样做呢

if(foo == bar)
do this;
else 
do that;

看起来更清楚,如果你在条件块中返回任何语句,它会使程序更具可读性

答案 4 :(得分:1)

如果我理解正确,您会询问以下两个片段之间的区别。

if (predicate1()) {
    doThis();
} else if (predicate2()) {
    doThat();
}

if (predicate2()) {
    doThat();
} else if (predicate1()) {
    doThis();
}

如果谓词1和谓词2可能同时为真,那么结果会有所不同,我相信你已经意识到这一点。所以我会假设其中最多只有一个是真的。我还假设我们可以安全地忽略评估条件的任何副作用。

是否存在可读性差异?不像代码那样。但是,在具体情况下,普通读者可能会发现首先评估一个谓词更为自然。如果是这样,请继续。

你问效率。第一个答案是,你不应该。但无论如何,有两个指导方针,我认为你已经触及了两个指南:

  • 首先评估最常见的情况
  • 评估首先评估最便宜的条件

如果我们有数字,我们可以制作一个很好的数学计算每个片段的平均成本并选择最佳。

至于==!=是否更便宜,我的态度显然不知道答案。我希望它会随着您比较的类型而变化,无论您是运行字节代码还是本机代码,还是您的CPU类型和其他因素。你可以去衡量,周围的人可能会知道一两个规则。无论如何,差异必须非常微小。