在for循环条件中使用string.length()比初始化为的局部变量更好,为什么?

时间:2018-03-30 09:42:57

标签: java arrays string for-loop

我的印象是,在for循环条件中,使用变量代替对字符串函数length()的方法调用总是更好。虽然在以下答案中Saint Hill分析它似乎正好相反

https://stackoverflow.com/a/11876086/6517886

for (int i = 0; i < data.length(); i++) {
    ...
}

final int len = data.length();
for (int i = 0; i < len; i++) {
    ...
}

是什么原因?

1 个答案:

答案 0 :(得分:1)

  

根本不需要定义变量,需要在方法字节代码中进行堆栈操作。

不,不。它需要在调用方法时在堆栈帧中分配额外的插槽。无论如何都分配了堆栈帧。分配额外的插槽没有开销。唯一改变的是字节代码中的常量,表明堆栈帧需要多大。

具体来说,没有用于声明局部变量的字节码指令。

  

但是,通过识别算法,优化可以快速跟踪实际机器代码中的重复操作,而不会产生变量分配的开销。

没有这样的开销。

这都是BS。