学习JVM原理-如果constant literal变了,用到它的其它类都要重新编译

假定Foo里定义了一个constant literal(literal 指String, int之类的字面量),而Bar里又用到了这个常量

一旦Foo里的常量值变了, 而Bar没有重新编译,则Bar里的值仍是Foo变之前的那个值

为什么会这样?  因为编译Bar时会把Foo里的常量值直接写到Bar.class这个字节码文件里; 运行Bar的代码时,JVM并不会动态地去Foo里取这个值,而是直接从Bar.class字节码文件中把值找出来,所以Foo的改动不会影响到Bar的运行

所以,如果Foo里的常量值变了,则Bar应该重新编译,把Foo中的新值更新到字节码文件中

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.