我的問題是最好的例子。如果常量會阻止它被使用,優化器是否會阻止創建字符串參數?
public static boolean DEBUG = false;
public void debugLog(String tag, String message) {
if (DEBUG)
Log.d(tag, message);
}
public void randomMethod() {
debugLog("tag string", "message string"); //Example A
debugLog("tag string", Integer.toString(1));//Example B
debugLog("tag string", generateString());//Example C
}
public String generateString() {
return "this string";
}
我的問題是,在任何的實施例中,A,B或C - 由於串將不被最終用於將優化刪除它?
或者問另一種方式,是否會更好地執行以下操作,從而確保不會創建字符串對象?
public void randomMethod() {
if (DEBUG) debugLog("tag string", "message string"); //Example A
if (DEBUG) debugLog("tag string", Integer.toString(1));//Example B
if (DEBUG) debugLog("tag string", generateString());//Example C
}
優化程序(如果寫入權限)應該刪除它們。 –
實際上,A和C中的字符串都是文字,因此被實施,因此不會以任何方式創建字符串。但是這個問題並不重要,我明白你的意思。 – delnan
@JesusRamos編譯器作者想與你合作,關於正確性和實用性 – delnan