編譯時常量和執行時常量

2021-08-07 20:44:47 字數 515 閱讀 2060

public class testconstant 

}class test

public static final int a = 10;

public static final int b = "test".length();

public static final string s = "world";

public static integer a2 = 20;

public static final a a3 = new a();

public static final e e = e.a;

}class a

enum e

編譯時常量,在使用時會被直接寫成值,而不會再從原來的類中讀取。這樣就會導致問題的產生:如果a類定義了常量,b類使用了常量,並且都進行了編譯。當a類的原始碼被改動了,常量的值發生了變化。我們對a類進行了重新編譯,但是沒有對b類進行重新編譯;那麼b類中用到的是原來a類中的常量值,即舊值。這就導致了風險的發生。

類的載入順序 一 編譯時常量與執行時常量

編譯時常量在編譯階段會寫死到.class中 而且會存入到 呼叫這個常量的方法所在的類的常量池中 如下 編譯後 刪除parents01.class 後依然可以正常執行 public class mytest01 class parents01 out parents01 const value 說明v...

JVM 常量池 執行時常量池 字串常量池的理解

補充 答 常量池有class檔案的常量池 在檔案中 執行時常量池 記憶體中,由class檔案常量池得來 字串常量池是大的全域性字串快取池,公用。問 是的,那我這裡有點疑惑,就是這個helloword在編譯期的時候,是存於class的常量池中的,在class被載入後,存於記憶體中的執行時常量池,那麼,...

JDK1 8關於執行時常量池, 字串常量池的要點

網上關於jdk 1.8的各種實驗,結論魚龍混雜 很多都相矛盾,網上有的實驗也被後人測試出了不同的結果 很多都分辨不了真假,這裡記錄一下網路上正確的結論,歡迎指正 首先自行區分執行時常量池與class檔案常量池 靜態常量池 的概念,jvm記憶體模型 方法區與永久代的區別,有些在我的其他部落格有介紹,連...