是否检查== equals或!= not equals in if else阻止

时间:2015-08-20 06:26:56

标签: java performance optimization

我对两种不同风格的等于比较的表现(如果它会影响)有一个问题:

if(obj!=null)
{
    //perform some operation set 1
}
else
{
        //do operation set 2
}

VS

if(obj==null)
{
    //do operation set 2
}
else
{
        //perform some operation set 1
}

在第一种情况下,我在某处阅读了它的双重任务,但现在无法回想起来。考虑到性能/分配,情况是否相同?

修改

请参阅PMD规则,例如Link1Link 2(其中至少谈到一种风格在可读性方面更好,搜索标题ConfusingTernary)

4 个答案:

答案 0 :(得分:2)

这取决于您的情况下更频繁发生的情况。始终将更频繁的场景保留为第一个块。

假设我必须测试A> 10或者不是,那么如果A大于10的可能性更大,那么我将看到我的业务要求。我将其保留为第一块。

大多数情况下,空值非常少,因此应该将它作为第二个块。

  if(obj!=null){
   //perform some operation set 1
  }else{
   //do operation set 2
  }

因为你在一个案例中所做的是: -

  check cond 1 > if true > execute

  check cond 1 > if false > check 2 > if true > execute

因此,如果您知道cond 1在大多数情况下都是正确的,那么请选择此。

答案 1 :(得分:1)

从性能的角度来看两者都是一样的。如果发现交换这些分支可能会提高性能,JIT编译器可以自由地重新安排这些分支。在源代码中使用提高源可读性的顺序,并将性能问题留给JIT编译器。它知道的更好。

答案 2 :(得分:0)

  

没有。没有性能影响。

这就像问你有苹果吗?

If yes then make apple milk shake else makes orange juice.

现在反过来了。

你有橘子吗?

If it is a yes make orange juice or a apple milk shake.

两者都是一样的。

答案 3 :(得分:0)

它更多的编码风格。这是一篇可能正在寻找的帖子..link