简短的回答:别担心!
长答案:
在谈论最终的局部变量时,请记住,使用关键字将有助于编译器静态优化代码,这最终可能会导致更快的代码。例如,以下示例中的最后一个字符串是静态串联的(在编译时)。final
a + b
public class FinalTest {
public static final int N_ITERATIONS = 1000000;
public static String testFinal() {
final String a = "a";
final String b = "b";
return a + b;
}
public static String testNonFinal() {
String a = "a";
String b = "b";
return a + b;
}
public static void main(String[] args) {
long tStart, tElapsed;
tStart = System.currentTimeMillis();
for (int i = 0; i < N_ITERATIONS; i++)
testFinal();
tElapsed = System.currentTimeMillis() - tStart;
System.out.println("Method with finals took " + tElapsed + " ms");
tStart = System.currentTimeMillis();
for (int i = 0; i < N_ITERATIONS; i++)
testNonFinal();
tElapsed = System.currentTimeMillis() - tStart;
System.out.println("Method without finals took " + tElapsed + " ms");
}
}
结果呢?
Method with finals took 5 ms
Method without finals took 273 ms
已在 Java Hotspot VM 1.7.0_45-b18 上测试。
那么实际性能改进了多少呢?我不敢说。在大多数情况下,可能是微不足道的(在这个综合测试中约为270纳秒,因为完全避免了字符串串联 - 这种情况很少见),但在高度优化的实用程序代码中,这可能是一个因素。无论如何,原始问题的答案是肯定的,它可能会提高性能,但充其量只是微不足道的。
撇开编译时的好处不谈,我找不到任何证据表明关键字的使用对性能有任何可衡量的影响。final