26

コード例:

public class StringHolder{
    public static final String ONE = "ONE";
    public static final String TWO = "TWO";
    public static final String THREE = "THREE";

    public static void main (String[] args){
        String someVariable = ONE + TWO + THREE;
    }
}

静的定数から文字列値を評価するにはどうすればよいですか?. たとえば、Intellij Idea を使用すると、プログラムをデバッグで実行し、ブレーク ポイントを設定し、式で「ctrl+alt+f8」を押して、式の値を確認できます。コードをコンパイルしてプログラムを実行せずに、静的アナライザーでこれを評価することは可能ですか? 重要な点は、関数パラメーターからではなく静的定数から計算された値であるため、アナライザーは定数値に「移動」し、それらを連結して、ポップアップ ウィンドウに値を表示します。

ブロックと「初期化されたばかり」の変数がある場合の別の状況:

{
    final String a = "a";
    final String b = "b"
    final String c = "c"
    String result = a+b+c;
}

PS わかりましたか?:)

4

3 に答える 3

4

"ONETWOTHREE"バイトコードを逆コンパイルすると、コンパイル時に連結された文字列を確認できます。

javap -c StringHolder

そして最初の課題を見ています。

の連結first + second + thirdはコンパイル時ではなく実行時に行われるため、StringBuilderorを使用したコードが表示されると予想されStringBuffer、コードを実行しないとその文字列連結の「結果」はありません。

于 2013-03-11T09:41:47.647 に答える
-1
public static final String ONE = "ONE";
public static final String TWO = "TWO";
public static final String THREE = "THREE";

コンパイル時の定数であり、コンパイル時にインライン化されます。

したがって.class、逆コンパイルによって生成されたファイルで結果を確認できます。もう 1 つresultは実行時まで表示されません。

逆コンパイルされたコードのsomeVariableようなものが表示someVariable = "ONETWOTHREE";されます。コンパイラは最適化のためにこれを行うため、表示されます。

于 2013-03-11T09:44:14.390 に答える