简而言之,JVM是否在内部优化了以下代码
public void test(String str)
{
int a = 0;
for( int i = 0; i < 10; i++)
{
a = a + str.length();
}
}
像下面的行为一样高效:
public void test(String str)
{
int len = str.length();
int a = 0;
for( int i = 0; i < 10; i++)
{
a = a + len;
}
}
如果它确实进行了优化,它是否通过在内部缓存 str.length() 值来实现?
最佳答案
Elliot F 的回答不错。
我做了一个简单得多的测试,并以非常大量的重复次数运行这两种方法,并分别计时。
第一种方法(长度只计算一次)始终比第二种方法快。
这是我创建的整个测试类;
package _testing;
import java.util.Date;
public class Speed {
long count = 5000000;
public static void main(String[] args) {
long start, finish;
Speed sp = new Speed();
start = new Date().getTime();
sp.test("test");
finish = new Date().getTime();
System.out.println("test 1:"+(finish - start));
start = new Date().getTime();
sp.test2("test");
finish = new Date().getTime();
System.out.println("test 2:"+(finish - start));
}
public void test(String str) {
int len = str.length();
int a = 0;
for (int i = 0; i < count; i++) {
a = a + len;
}
}
public void test2(String str) {
int a = 0;
for (int i = 0; i < count; i++) {
a = a + str.length();
}
}
}
输出看起来像这样;
test 1:7
test 2:22
关于java - 在 for 循环中使用它之前将 str.length() 值存储在变量中是否在 Java 中有任何性能改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27496870/