大家都知道在編譯的時候javac的內聯常數,這可能會導致有趣的問題時,只有重新編譯應用程序的一部分,每個人都知道這裏通常的解決這個(讓這個javac的沒有按」不懂它實際上是一個編譯時間常數)System.out和最終目標內聯
但是,如果我們在Oracle JDK的System.class
看代碼,我們看到以下內容:
public final static PrintStream out = null;
所以大概out
被反射或一些其他機制設置JVM初始化。但是這導致了一個問題:爲什麼不在這裏內聯? (至少我使用System.out.println()
時從未得到空指針異常)。
是否javac的特殊情況下的場景,或者這實際上由語言規範合理地處理?
只有文字的常量被內聯,其餘每個都被讀取 – bestsss