“for loop”仅循环一次或两次。如果是更好的选择吗?

时间:2013-03-07 15:34:34

标签: java if-statement for-loop

count变量的值将仅为0或1或2

以下是我想要实现的目标 如果count为1,那么做一次,如果它的2做两次

这是一个更好的解决方案

        for(int j=0;j<count;j++){
            System.out.println("PRINTING...");
        }

或者

        if(count==1){
            System.out.println("PRINTING...");
        }else if (count==2){
            System.out.println("PRINTING...");
            System.out.println("PRINTING...");
        }

我想知道哪一个更好,为什么。

3 个答案:

答案 0 :(得分:4)

显然是第一个。 不要重复自己! 这种循环展开似乎是过早优化的严重情况。

答案 1 :(得分:1)

这取决于实际要求。

如果“做什么”对于每次迭代总是相同的,显然循环更好。

如果不是,则取决于差异的性质,差异的数量(例如,是否有一个特殊情况,多个特殊情况,可以计算特殊情况等)

如果您希望代码无需更改,那么它也是可扩展的。

答案 2 :(得分:1)

我认为关注的是性能,因为从代码可读性和可维护性的角度来看,for循环版本显然以极大的优势获胜。

如果循环体中的代码与println调用一样长,则无关紧要。

如果循环体非常小且快,那么主要成本将是任何错误预测的条件分支或缓存未命中。如果在将条件分支加载到管道之后硬件猜测下一条指令是错误的,则必须在分支到达执行阶段后刷新整个管道。这真的很贵。

if版本可能导致比for-loop更不常见的条件分支模式。硬件分支预测可能更适用于常见的习语,这些习惯常常出现在设计时使用的基准测试中。

当处理器将数据传送到执行逻辑时,高速缓存未命中会导致停顿。 if版本更长,因为有三个循环体副本,因此它有更高的指令缓存未命中风险。他们使用相同的数据,因此他们同样可能会遇到数据缓存未命中。

我的猜测是,如果存在任何可衡量的差异,那么for循环版本可能会更快。这只是猜测。

如果你的程序的性能真的取决于这个循环的编写方式,你应该对它进行基准测试。由于依赖于硬件分支预测的微妙之处,我建议在尽可能多的不同处理器上对每个版本的程序进行基准测试。如果这对程序的性能不够重要,无法证明这一努力,那就坚持使用for循环。