我的印象是,在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++) {
...
}
是什么原因?
答案 0 :(得分:1)
根本不需要定义变量,需要在方法字节代码中进行堆栈操作。
不,不。它需要在调用方法时在堆栈帧中分配额外的插槽。无论如何都分配了堆栈帧。分配额外的插槽没有开销。唯一改变的是字节代码中的常量,表明堆栈帧需要多大。
具体来说,没有用于声明局部变量的字节码指令。
但是,通过识别算法,优化可以快速跟踪实际机器代码中的重复操作,而不会产生变量分配的开销。
没有这样的开销。
这都是BS。