6

以下のテキストは、jls http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.5.3からのものです。

それでも、いくつかの合併症があります。フィールド宣言で final フィールドがコンパイル時の定数式 (§15.28) に初期化されている場合、その final フィールドの使用はコンパイル時に定数式の値に置き換えられるため、final フィールドへの変更は観察されない場合があります。 .

どなたか、上記のより良い説明を教えてください。「最終フィールドへの変更は観察されない可能性があります」という文が理解できませんでした。例の助けを借りて 5 月。

4

3 に答える 3

4

これは、クラスに次のものがある場合を意味します。

public class Foo {
    public final boolean fooBoolean = true; // true is a constant expression
    public final int fooInt = 5; // 5 is a constant expression
}

コンパイル時に、 への参照Foo.fooBooleanは に置き換えられtrue、 への参照Foo.fooIntは に置き換えられる場合があります5。実行時にリフレクションを介してこれらの最終フィールドのいずれかを後で変更した場合、それを参照するコード (記述されているとおり) はそれを認識しない可能性があります。

于 2013-07-06T19:35:28.393 に答える