2016-05-17 7 views
-2

私は、変数は次のように宣言したことを知っている:なぜ最終的な変数は定数ではありませんJava?

public class Example { 
    public static final int MY_CONSTANT = 10; 

} 

は、Java一定であると考えられています。私は本当に最終的な宣言された変数が定数と考えることができない理由を理解できませんか?

+3

_ finalと宣言された変数が定数とはみなされない理由をわかりません_静的ではなく、宣言時に初期化されませんか?どのような場合には、それは_constant_とは考えられていないと考えることができますか?そして、あなたは_constant_を変わらないとか、JLSで定義されているような_constant式_のように_constant_を意味しますか? –

+2

私はこれを他の質問と重複したものとしてマークしていますが、あなたはまったく同じ質問をしていますが、私はそこでは答えが不満であると言わなければなりません。特に、[JLS](https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.4)では、「定数変数は(15.28)定数で初期化されたプリミティブ型または型文字列 "であり、これは' static'の言及を全くしていない。 –

+0

@Andy Turner:はい、ローカル変数でさえも定数にすることができます。面白いことをしたいのであれば、 'switch'ステートメントの' case'ラベルのようなローカル定数を使うか、ローカル 'class'の注釈でそれらを参照することができます。 – Holger

答えて

0

最終的ですが静的ではない変数は、1つのオブジェクトの定数値を持ちます。つまり、そのオブジェクトのコンストラクタによってのみ変更できます。しかし、異なるオブジェクトに対しては、変数は依然として異なる値を持つことができます。それが厳格な意味で一定ではない理由です。

別の理由は、静的変数にアクセスするオブジェクトを作成する必要がないということです。なぜ定数にアクセスするためにオブジェクトを作成する必要がありますか?

+3

割り当てられていれば別の値はありません'final int myConstant = 10;'と宣言されたときの値。 –

+0

@AndyTurner:Trueですが、(私が知っているIDEの中で)値がどのように割り当てられているかは分かりません。 'static final'の場合、プログラム全体で一定の値を持つことは明らかです。 –

+0

@FrankPufferなぜそれがより明白ですか?いずれの場合も、コードを調べたり、マニュアルを読んだりする必要があります。 –

関連する問題