在for循环条件下反复调用getter

时间:2015-11-21 23:20:37

标签: java performance loops getter

哪个循环更快,甚至有所作为?

x

final int cSize = getSize();
for(lineCount = 0; lineCount <= cSize; lineCount++) {
   // Do something!
}

for(lineCount = 0; linecount <= getSize(); lineCount++) { // Do something! } 是一个简单的吸气者:

getSize()

2 个答案:

答案 0 :(得分:2)

假设this.size final,这两个循环有不同的语义:

  • 第一个循环不会对循环内部size的变化作出反应;它将根据cSize变量的要求执行多次。
  • 第二个循环将对size的更改作出反应。如果size增加或减少,循环迭代次数也会增加或减少。

就性能而言,Java的即时编译器非常智能,可以直接用于this.size变量,有效地绕过了getter。这会产生非常相同的性能。

答案 1 :(得分:-3)

使用此示例测试不同的for循环:

-bin
--www
routes
-index.js
views
-partials
--footer.ejs
--head.ejs
--header.ejs
--javascripts.ejs
-error.ejs
-index.ejs
app.js
package.json
  

结果

对于每个循环:: 108 ms

使用collection.size():: 39 ms

使用[int size = list.size(); int j = 0; j&lt;大小; j ++] :: 4 ms

使用[int j = list.size(); j>大小; j--] :: 0 ms