Java 言語のドキュメントには次のように書かれています。
プリミティブ型または文字列が定数として定義されていて、その値がコンパイル時にわかっている場合、コンパイラはコード内のすべての定数名をその値に置き換えます。これは、コンパイル時定数と呼ばれます。
私の理解では、コードがある場合は次のようになります。
private final int x = 10;
次に、コンパイラはx
、コード内のすべての出現箇所をリテラルに置き換え10
ます。
ただし、実行時に定数が初期化されるとします。
private final int x = getX(); // here getX() returns an integer value at run-time.
コンパイル時の定数と比較して、パフォーマンスが低下することはありますか (無視できる程度であっても)?
別の質問は、以下のコード行かどうかです。
private int y = 10; // here y is not final
コンパイラによってコンパイル時定数と同じように扱われますか?
最後に、回答から私が理解していることは次のとおりです。
final static
コンパイル時の定数を意味します- 定数であることを意味します
final
が、実行時に初期化されます static
実行時に初期化されることを意味します- without
final
は変数であり、定数として扱われません。
私の理解は正しいですか?