次のようなものがあるとします
int x = 2 + 3;
x
リテラルと見なされますか?
x
はシンボルです。2 + 3
式です。2
と3
はリテラルです。
いいえ、コンパイル時の定数式の 2 つのリテラルです。コンパイル方法によっては、結果のバイナリの違いがわからない場合があります。
はい文字通りです。式はリテラルに縮小されます。つまり、プログラムが実行される前であっても、リテラルです。
現実世界で目にする可能性のある他のタイプのリテラル (プログラマーは自分で計算する必要はなく、コンパイラーにリテラルを決定する単調な作業を任せます):
const unsigned int NEGATIVE_TESTER_FOR_32_BIT = 1 << 31;
const char ALPHABET_PIVOT = 'A' + (('Z' - 'A') / 2);
[編集:コンパイラに依存することについて] ええ、コンパイラに依存します。しかし、ほとんどのコンパイラ作成者は宿題をやっていると思います。言語の必然的なアセンブリまたは仮想マシン命令を生成できれば、コンパイル時に物事を計算することは、彼らにとって公園を散歩するだけです。実際、たとえば文字リテラル 'H' でさえ、ファイルに逐語的に'H'として格納されることさえなく、最終的なマシン コードで数値リテラル (72、または 16 進数表示で 0x48 または 48h) として格納されます。私は、すべてのコンパイラが 2 つのリテラルを式ではなくリテラルに縮小するという推測を危険にさらす可能性があります。彼ら(コンパイラライター)にとっては公園の散歩です
これらすべての構文要素がどのように命名されているかを知るには、ig を閲覧できます
http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html
http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html