我对两种不同风格的等于比较的表现(如果它会影响)有一个问题:
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规则,例如Link1或Link 2(其中至少谈到一种风格在可读性方面更好,搜索标题ConfusingTernary)
答案 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