我使用的是Oracle JDK8。我们假设我们有以下两个类:
class MyLoop {
private final long times;
MyLoop(final long times) {
this.times = times;
}
int widerScope() {
final String var = MyClass.VARIABLE;
int j = 0;
for (long l = 0; l < times; l++) {
j += var.length();
}
return j;
}
int narrowerScope() {
int j = 0;
for (long l = 0; l < times; l++) {
final String var = MyClass.VARIABLE;
j += var.length();
}
return j;
}
}
class MyClass {
static final String VARIABLE = "foo";
}
我想知道哪一个效率更高,widerScope()
和narrowerScope()
。我更喜欢narrowerScope()
,因为变量var
的范围较窄,但widerScope()
仅将变量var
初始化一次,因此我认为它可能更有效。
我还创建了一个用于基准测试的测试用例,但我无法看到执行时间的任何显着差异。
public class MyLoopTest {
private final MyLoop sut = new MyLoop(6000000000L);
@Test
public void narrower() throws Exception {
sut.narrowerScope();
}
@Test
public void wider() throws Exception {
sut.widerScope();
}
}
你怎么看?或者,是否有任何参考,规范或信息可以明确这个问题?