我应该交换代码紧凑性以获得一点性能吗? 具体来说,以下两个中的哪一个更可取:
// case 0:
final boolean flag = <some condition>;
for (int i = 0; i < SOME_COUNT; ++i)
{
if (flag)
{
// do foo
}
else
{
// do bar
}
}
// case 1:
final boolean flag = <some condition>;
if(flag)
{
for (int i = 0; i < SOME_COUNT; ++i)
{
// do foo
}
}
else
{
for (int i = 0; i < SOME_COUNT; ++i)
{
// do bar
}
}
答案 0 :(得分:5)
喜欢前者。尽管如此,JIT能够使第一个与第二个一样快。
具有表现的经验法则:如有疑问,请进行衡量。当您决定衡量时,请先阅读:How do I write a correct micro-benchmark in Java?
答案 1 :(得分:4)
考虑到flag
属性常量和非易失性,我会选择第二个选项。
为什么你会花时间检查病情,你已经知道了结果?
只需在开头检查一次,然后做你的事
请注意,您可能还需要执行一些依赖于标记值的操作,并且需要在for循环外部执行。
在第二种情况下,它就像在条件分支中添加新行一样简单
在第一种情况下,您需要检查for循环外的条件 AGAIN
答案 2 :(得分:0)
我选择0。 两件事: