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...");
}
我想知道哪一个更好,为什么。
答案 0 :(得分:4)
答案 1 :(得分:1)
这取决于实际要求。
如果“做什么”对于每次迭代总是相同的,显然循环更好。
如果不是,则取决于差异的性质,差异的数量(例如,是否有一个特殊情况,多个特殊情况,可以计算特殊情况等)
如果您希望代码无需更改,那么它也是可扩展的。
答案 2 :(得分:1)
我认为关注的是性能,因为从代码可读性和可维护性的角度来看,for循环版本显然以极大的优势获胜。
如果循环体中的代码与println调用一样长,则无关紧要。
如果循环体非常小且快,那么主要成本将是任何错误预测的条件分支或缓存未命中。如果在将条件分支加载到管道之后硬件猜测下一条指令是错误的,则必须在分支到达执行阶段后刷新整个管道。这真的很贵。
if版本可能导致比for-loop更不常见的条件分支模式。硬件分支预测可能更适用于常见的习语,这些习惯常常出现在设计时使用的基准测试中。
当处理器将数据传送到执行逻辑时,高速缓存未命中会导致停顿。 if版本更长,因为有三个循环体副本,因此它有更高的指令缓存未命中风险。他们使用相同的数据,因此他们同样可能会遇到数据缓存未命中。
我的猜测是,如果存在任何可衡量的差异,那么for循环版本可能会更快。这只是猜测。
如果你的程序的性能真的取决于这个循环的编写方式,你应该对它进行基准测试。由于依赖于硬件分支预测的微妙之处,我建议在尽可能多的不同处理器上对每个版本的程序进行基准测试。如果这对程序的性能不够重要,无法证明这一努力,那就坚持使用for循环。