final效率分析
1. 被final修饰的类
public final class FinalClass { public void getJava() { String str1 = "Java "; String str2 = "final "; for (int i = 0; i < 10000; i++) { str1 += str2; } } public void getJava_Final() { String str1 = "Java "; String str2 = "final "; for (int i = 0; i < 10000; i++) { str1 += str2; } } }
2: 被final修饰的方法
public class FinalFunction { public void getJava() { String str1 = "Java "; String str2 = "final "; for (int i = 0; i < 10000; i++) { str1 += str2; } } public final void getJava_Final() { String str1 = "Java "; String str2 = "final "; for (int i = 0; i < 10000; i++) { str1 += str2; } } }
3. 测试类:
public class TestFinal { @Test public void test5() { FinalClass finalClass = new FinalClass(); FinalFunction finalFunction = new FinalFunction(); long t1=0; long t2=0; long t3=0; long t4=0; long t5=0; long tim1 = 0; long tim2 = 0; long tim3 = 0; long tim4 = 0; long tim5 = 0; for(int j=0; j<10;j++){ System.out.println("正常执行:========================"); long start = System.nanoTime(); String str1 = "Java "; String str2 = "final "; for (int i = 0; i < 10000; i++) { str1 += str2; } tim1 = (System.nanoTime() - start)/1000000; System.out.println("正常的执行时间为:" + (tim1) + "毫秒时间"); t1 = t1 + tim1; System.out.println("finalClass:====================="); start = System.nanoTime(); finalClass.getJava(); tim2 = (System.nanoTime() - start)/1000000; System.out.println("调用不带final修饰的方法执行时间为:" + tim2 + "毫秒时间"); t2 = t2 + tim2; start = System.nanoTime(); finalClass.getJava_Final(); tim3 = (System.nanoTime() - start)/1000000; System.out.println("调用final修饰的方法执行时间为:" + tim3 + "毫秒时间"); t3 = t3 + tim3; System.out.println("finalFunction:====================="); start = System.nanoTime(); finalFunction.getJava(); tim4 = (System.nanoTime() - start)/1000000; System.out.println("调用不带final修饰的方法执行时间为:" + tim4 + "毫秒时间"); t4 = t4 + tim4; start = System.nanoTime(); finalFunction.getJava_Final(); tim5 = (System.nanoTime() - start)/1000000; System.out.println("调用final修饰的方法执行时间为:" + tim5 + "毫秒时间"); t5 = t5+ tim5; } System.out.println("正常执行:========================"); System.out.println("正常的执行10次平均时间为:" + t1/10 + "毫秒时间"); System.out.println("finalClass:====================="); System.out.println("调用不带final修饰的方法执行10次平均时间为:"+ t2/10 + "毫秒时间"); System.out.println("调用final修饰的方法执行10次平均时间为:" + t3/10 + "毫秒时间"); System.out.println("finalFunction:====================="); System.out.println("调用不带final修饰的方法执行10次平均时间为:" + t4/10 + "毫秒时间"); System.out.println("调用final修饰的方法执行10次平均时间为:"+ t5/10 + "毫秒时间"); } }
4. 结果
正常执行:======================== 正常的执行时间为:1573毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1410毫秒时间 调用final修饰的方法执行时间为:1402毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1285毫秒时间 调用final修饰的方法执行时间为:1339毫秒时间 正常执行:======================== 正常的执行时间为:1523毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1444毫秒时间 调用final修饰的方法执行时间为:1457毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1446毫秒时间 调用final修饰的方法执行时间为:1480毫秒时间 正常执行:======================== 正常的执行时间为:1355毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1321毫秒时间 调用final修饰的方法执行时间为:1330毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1435毫秒时间 调用final修饰的方法执行时间为:1328毫秒时间 正常执行:======================== 正常的执行时间为:1277毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1350毫秒时间 调用final修饰的方法执行时间为:1390毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1323毫秒时间 调用final修饰的方法执行时间为:1271毫秒时间 正常执行:======================== 正常的执行时间为:1406毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1352毫秒时间 调用final修饰的方法执行时间为:1336毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1267毫秒时间 调用final修饰的方法执行时间为:1436毫秒时间 正常执行:======================== 正常的执行时间为:1322毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1308毫秒时间 调用final修饰的方法执行时间为:1270毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1431毫秒时间 调用final修饰的方法执行时间为:1315毫秒时间 正常执行:======================== 正常的执行时间为:1273毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1300毫秒时间 调用final修饰的方法执行时间为:1368毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1090毫秒时间 调用final修饰的方法执行时间为:1099毫秒时间 正常执行:======================== 正常的执行时间为:1081毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1133毫秒时间 调用final修饰的方法执行时间为:1079毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1089毫秒时间 调用final修饰的方法执行时间为:1068毫秒时间 正常执行:======================== 正常的执行时间为:1111毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1098毫秒时间 调用final修饰的方法执行时间为:1086毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1113毫秒时间 调用final修饰的方法执行时间为:1046毫秒时间 正常执行:======================== 正常的执行时间为:1144毫秒时间 finalClass:===================== 调用不带final修饰的方法执行时间为:1057毫秒时间 调用final修饰的方法执行时间为:1114毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行时间为:1094毫秒时间 调用final修饰的方法执行时间为:1064毫秒时间 正常执行:======================== 正常的执行10次平均时间为:1306毫秒时间 finalClass:===================== 调用不带final修饰的方法执行10次平均时间为:1277毫秒时间 调用final修饰的方法执行10次平均时间为:1283毫秒时间 finalFunction:===================== 调用不带final修饰的方法执行10次平均时间为:1257毫秒时间 调用final修饰的方法执行10次平均时间为:1244毫秒时间
5. 总结
基本上带final的效率比不加稍微快点,但也不是很明显。同样这个测试跑了多次,有时带final的效率比不带final的低,个人觉得final在效率的提升上不是很明显。
final的用途主要是它修饰在类,方法,变量上体现的一些特性上。