假设您有以下代码..
for(Element elm : elements)
if(elm instanceof Foobar)
Session.getSomething().getListOfSomething().add((Foobar)elm);
执行以下操作不是更好吗?
List<Foobar> list = Session.getSomething().getListOfSomething();
for(Element elm : elements)
if(elm instanceof Foobar)
list.add((Foobar)elm);
假设 Something 和 listOfSomething 在循环执行期间没有改变。 我认为由于减少了方法调用,这可以大大减少调用堆栈推送/弹出的数量。
这种优化是不是太挑剔了?我不认为 java 编译器会假设他们可以通过这种方式进行优化。
编辑:未简化代码以排除 AddAll 的使用
最佳答案
在大多数情况下这会更好。原因是 Java 对调用约定非常严格,每次迭代都必须进行 4 次额外的虚拟调用。有一些异常(exception)(即通过 JIT 内联),但这是一种奇特的情况。
尽管使用默认函数可能会更好:
Session.getSomething().getListOfSomething().addAll(elements)
关于Java for 循环优化 - 在循环之前存储 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090667/