2

差异可能很小或不存在,但哪个更有效,为什么?

int nItems = param.getItemList().size();
for (...) {
    if (nitems == 1) doSomething();
}

或者

for (...) {
    if (param.getItemList().size() == 1) doSomething();
}  
4

4 回答 4

8

从理论上讲,第一个会更快(你分析过它吗?你应该!),因为它把一个经常使用的方法调用拉到循环之外。但是,如果有足够的时间,JIT 编译器可能会优化/内联方法调用,从而使两种解决方案在性能方面无法区分。

这样的微优化不值得努力,更好地针对更清晰、更易于理解的解决方案。恕我直言,这恰好是第一个。

于 2012-06-13T20:15:25.120 回答
1

在循环外进行方法调用效率更高。有时它甚至可能很重要。第二种方法可能更有效的一种情况是for循环的条件是否导致循环被完全跳过。

于 2012-06-13T20:14:53.923 回答
0

第一个更有效,因为不需要多次调用该方法。但是,由于两者getItemList()似乎size()都是访问者,因此差异将是微乎其微的。

于 2012-06-13T20:14:58.540 回答
0

第一个,因为您不需要为循环的每次迭代都进行两次调用

于 2012-06-13T20:15:59.083 回答