我在我的應用程序下面的代碼:Java編譯器不優化靜態最終字符串。爲什麼?
public static final boolean DEBUG = true;
public static final boolean REL = !DEBUG;
private static final String DEBUG_OR_RELEASE = (REL) ? "RELEASE_VER" : "DEBUG_VER";
我認爲Java編譯器將完全從生成的.apk文件消除"DEBUG_VER"
字符串(當通過Proguard的出口),但是當我檢查.apk文件,我在那裏看到了「DEBUG_VER」字符串。
爲什麼?我錯過了什麼?我做錯了什麼?
那麼,如果你不認爲你應該看到「RELEASE_VER」,那麼可能你正在編譯調試,通常這種優化在調試模式下被禁用。 – 2012-01-29 02:20:11
除此之外,即使語句經過優化,字符串文字可能會留在常量池中。它基本上是無害的。 – 2012-01-29 02:21:14
'DEBUG_OR_RELEASE =(REL)? 「DEBUG_VER」:「DEBUG_VER」'?真?請發佈您的真實代碼。 – erickson 2012-01-29 03:53:36