对与JAVA中的final变量,JAVA编译器是进行了优化的。每个使用了final类型变量的地方都不会通过连接而进行访问。比如说Test类中使用了Data类中一个final的int数字fNumber=77,这时候,java编译器会将77这个常数编译到Test类的指令码或者常量池中。这样,每次Test类用到fNumber的时候,不会通过引用连接到Data类中进行读取,而是直接使用自己保存在类文件中的副本。
用程序说话:
C:/>javac Test.javaTest.java:public class Test{ public static void main(String[] args){ System.out.println(Data.fNumber); }}
Data.java:
public class Data{ public static final int fNumber=77;}
执行命令和结果:
C:/>javac Test.javaC:/>javac Test.java
C:/>java Test77
C:/>