「アミーゴ、あなたがうらやましいです。新しいことを学ぶのはとても素晴らしいことです!そして今日は、新しくて興味深いトピックがあなたを待っています。文字通りです。」

「どうやら、私は地球上で最も幸せなロボット学生だと言うべきでしょう、リシ。そうですね、新しい知識を吸収する準備はできています!」

「それでは、すぐに本題に取り掛かりましょう。リテラルとは、プログラムのコードに直接記述される特定のデータです。ここでは、単なるデータについて話しているわけではありません。プリミティブ型と文字列についてのみ話しています。

たとえば、次のコードがあるとします。

コード リテラル
int a = 5;
int b = a + 10;
String s = "Sum=" + (a + b);
5
10
"Sum="

「このコードのリテラルは、数値5、数値10、および文字列 ' Sum = ' です。

整数リテラル

「Java では、リテラルを含むすべてのものに型があります。コード内のすべての整数リテラル (整数) はintです。int 型は標準の Java 整数型です。」

「このタイプは知っています。使ったこともあります。」

「int 以外の整数型を覚えていますか? メモリ内で使用するスペースが少ない整数型もありますか?」

「もちろんですよ!バイトとショートですよ。」

「これらがそれらです。したがって、コード内でバイト型またはショート型の変数に整数リテラルを割り当てることにした場合、問題はありません。重要なことは、リテラル値が、リテラル値が指定する値の範囲内にあることです。 Java コンパイラは、バイト変数に整数リテラル 100 を割り当てることができることを理解できるほど賢いです。

例:

コード 説明
int a = 300;
これは問題なくコンパイルされます。
byte a = 100; 
これは問題なくコンパイルされます。
byte a = 300; 
最大バイト値は 127 であるため、コンパイル エラーが発生します。

ロングタイプはどうでしょうか?

「このタイプのリテラルをコードに記述することもできます。これを行うには、整数の末尾にラテン文字 'L' または 'l' を追加します。

例:

コード 説明
long a = 3000000000L; 
これは問題なくコンパイルされます。
long a = 3000000000; 
コンパイル エラー: 30 億は int リテラルには大きすぎます。
int a = 3000000000L; 
コンパイル エラー: リテラルはlongですが、変数はintです。さらに、30 億は最大 int を超えています。

「10桁以上の大きな数字を読むのがいかに難しいか気づいたでしょうか?

「そうですね、ロボビジョンが有効になっていないと、30 億のことを言っているのか、30 のことを言っているのかすぐにはわかりません。」

コードを読みやすくするために (これは重要です!)、Java では数値リテラルにアンダースコアを挿入できます (数値の値には影響しません)。

「上記の例は、アンダースコアを使用してもう少しわかりやすく書き直すことができます。

コード 説明
long a = 3_000_000_000L; 
これは問題なくコンパイルされます。
long a = 3_000_000_000; 
コンパイル エラー: 30 億は int リテラルには大きすぎます。
int a = 3_000_000_000L; 
コンパイル エラー: リテラルはlongですが、変数はintです。さらに、30 億は最大 int を超えています。

「これは非常に読みやすいですが、アンダースコアの代わりにカンマを使用した方が馴染みがあります。」

「しかし、カンマはすでに別の目的で使用されているため、数値リテラルでカンマを使用することはできません。たとえば、メソッドを呼び出すときに引数を互いに区切るためなどです。

実数リテラル

「おそらく、コード内で整数だけでなく浮動小数点リテラル (実数) も指定できることはすでに推測されているでしょう。」

ダブルもフロートも?

「はい。実際、ルールは非常に単純です。コード内の数値に小数点が含まれている場合、その数値は浮動小数点リテラルです。また、単なるリテラルではなく、二重リテラルでもあります。浮動小数点リテラルを作成するには、次のようにます。数字の最後に文字「F」(または「f」)を付ける必要があります

例:

コード 説明
double a = 100.0; 
これは問題なくコンパイルされます。
double a = 100.;
これは問題なくコンパイルされます。
double a = .0;
これは問題なくコンパイルされます。
float a = 100.0f; 
これは問題なくコンパイルされます。
float a = 100.0; 
コンパイル エラーが発生します。変数は float ですが、リテラルは double です。

「ちなみに、サフィックス 'F' ( floatの場合) または D ( doubleの場合) を追加するだけで、整数リテラルを float または double リテラルに明示的に変換できます。例:

コード 説明
double a = 100D; 
これは問題なくコンパイルされます。
float a = 100F; 
これは問題なくコンパイルされます。
int a = 300D; 
コンパイル エラーが発生します。変数は int ですが、リテラルは doubleです

「浮動小数点リテラルでは科学表記法を使用できます。数値の符号付き部分に加えて、10 のべき乗も指定できます。例:

リテラル 数学的表記法 最終値
1.23E2 _ _ 1.23*10 2 123.0
1.23E3 _ _ 1.23*103 1230.0
1.23E - 6 1.23×10 -6 0.00000123
1E6 _ _ 1.0× 106 1000000.0
1E - 10 1.0×10 -10 0.0000000001

文字列リテラル

「コード内でテキスト行全体を指定することもできます。文字列をコードの一部ではなくデータ (リテラル) として扱うようにコンパイラーに指示するには、文字列全体の両側を二重引用符で囲みます。

「コードの 1 行に複数の二重引用符がある場合、それらはペアに分割されます。最初の二重引用符はリテラルの始まりを示します。次の二重引用符はリテラルの終わりを示します。その次の二重引用符は、再びリテラルを示します。新しいリテラルの始まり、次は 2 番目のリテラルの終わり、というように続きます。

「そのような各リテラルはStringです。

コード 説明
"+"+"+"+"+"+"+"+"+"
1 行に 5 つのリテラルがあります。それぞれは単一の「+」文字で構成されます
""
このリテラルは空の文字列です。文字を含まない文字列。
"2+3"+"-5"
ここには 2 つのリテラルがあります。結果は数値ではなく文字列「2+3-5」になります。
"return"+";"
ここにはリテラルも 2 つあります。ここには return ステートメントはありません。

「文字列リテラルが長すぎる場合は、複数の行に分割し、「プラス演算子」で結合することができます。

コード 説明
String s = "I hold it true, whate'er befall"
         + "I feel it when I sorrow most;"
         + "'Tis better to have loved and lost"
         + "Than never to have loved at all.";
この行を画面に出力すると、すべてのテキストが 1 行に表示されます。

文字リテラル

「文字列ではなく 1 文字のリテラルが必要な場合はどうすればよいですか? 1 文字で構成される文字列を作成する必要がありますか?」

「いいえ、その場合、 という型のリテラルが必要ですchar。そのようなリテラルの先頭と末尾がどのように指定されるかわかりますか?」

「一重引用符?」

「はい。一重引用符の内側には 1 文字を含める必要があります。空の一重引用符は使用できません。

例:

コード 説明
'A'
型が char であるリテラル。ラテン文字「A」が含まれています。
'@' 
型が char であるリテラル。「@」記号が含まれています
'' 
型が char であるリテラル。日本語の文字が入っています。そして、これも可能です。
'\u1f3a'
型が char であるリテラル。番号で指定された Unicode 文字が含まれています。

「最後の例では、特別な表記法を使用して Unicode 文字を割り当てます。最初に接頭辞があり\u、その後に 4 つの 16 進文字が続きます。これについては、次のレッスンで詳しく学びます。」