Java 哪一个更有效?缓存for循环中使用的方法调用结果

Java 哪一个更有效?缓存for循环中使用的方法调用结果,java,performance,Java,Performance,差别可能很小,或者根本不存在,但哪一个更有效,为什么 int nItems = param.getItemList().size(); for (...) { if (nitems == 1) doSomething(); } 或 在循环之外进行方法调用更有效。有时这甚至很重要。第二种方法可能更有效的一种情况是,如果for循环的条件导致循环被完全跳过。第一种方法更有效,因为该方法不需要多次调用。但是,由于getItemList()和size()似乎都是访问器,所以两者之间的差异将很小。

差别可能很小,或者根本不存在,但哪一个更有效,为什么

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


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

第一种方法更有效,因为该方法不需要多次调用。但是,由于
getItemList()
size()
似乎都是访问器,所以两者之间的差异将很小。

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


这样的微观优化不值得付出努力,更好地瞄准更清晰、更容易理解的解决方案。哪个IMHO恰好是第一个。

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

哪一个更有效?1)测试时发生了什么?2) 你说的“高效”是什么意思?
for (...) {
    if (param.getItemList().size() == 1) doSomething();
}