int a = 5;
コードでは、変数 a に割り当てられる初期値 5 が直接量です。
リテラル型
すべての型のデータがリテラルを指定できるわけではありません。通常、リテラルを指定できるのは、基本型、文字列型、および null 型の 3 つの型だけです。具体的には、 Java は以下の 8 種類のリテラルをサポートしています。
1) int 型のリテラル量
プログラム内で直接与える整数値は2進数、10進数、8進数、16進数の4種類に分けられ、そのうち2進数は0Bまたは0bで始まる必要があり、8進数は0で始まる必要があり、16進数は0Bで始まる必要があります。先頭は 0x または 0X で始まります。たとえば、123、012 (10 進数の 10 に相当)、0x12 (10 進数の 18 に相当) などです。
2) long 型のリテラル量
整数値の後に l または L を追加すると、long 型のリテラルになります。たとえば、3L、0x12L (10 進数の 18L に相当)。
3) float 型のリテラル量
浮動小数点数の後に f または F を追加すると、float 型の直接量になり、この浮動小数点数は標準 10 進数形式または科学的表記法で表現できます。たとえば、5.34F、3.14E5f。
4) double型の直接量
標準 10 進数形式または科学表記形式で浮動小数点数を直接与えることは、double 型のリテラルです。たとえば、5.34、3.14E5。
5) ブール型のリテラル量
このタイプのリテラルは true と false のみです。
6) char 型のリテラル量
char 型のリテラルには 3 つの形式があります。これらは、一重引用符で囲まれた文字、エスケープ文字、および Unicode 値で表される文字です。たとえば、「a」、「\n」、「\u0061」などです。
7) String型のリテラル量
二重引用符で囲まれた一連の文字は、String 型のリテラルです。
C/ C++を含む他のほとんどの言語では、文字列は文字の配列として実装されます。ただし、Java ではそうではありません。 Java では、文字列は実際にはオブジェクト型です。チュートリアルで後ほど説明しますが、Java は文字列をオブジェクトとして実装するため、幅広い文字列処理機能を備えており、関数は強力で使いやすいものです。
8) null 型のリテラル
この型のリテラルには、null という値が 1 つだけあります。
上記 8 種類のリテラルのうち、null 型は値が null の 1 つだけを持つ特殊な型です。そして、この直接量を任意の参照型変数に割り当てて、この参照型変数に格納されているアドレスが空であること、つまり有効なオブジェクトをまだ指していないことを示すことができます。
直接値の割り当て
通常、直接値は常に対応する型の変数に代入されます。たとえば、次のコードはすべて正当です。
int a = 5;
char c = ‘a’;
boolean b = true;
float f = 5.12f;
double d = 4.12;
String name = “IT基礎”;
String url = ” https://it-kiso.com “;
さらに、Java は値間の自動型変換もサポートしているため、値リテラルを別の型の変数に直接割り当てることができます。この割り当ては、システムによってサポートされている自動型変換 (int 型など) である必要があります。リテラル値は次のとおりです。 Long 型の変数に代入されます。
String 型の直接量を他の型の変数に割り当てることはできません。また、Null 型の直接量は、String 型を含む任意の参照型の変数に直接割り当てることができます。ブール型のリテラル値はブール型の変数にのみ代入でき、他の型の変数には代入できません。
文字列リテラルについて注意すべき点の 1 つは、プログラムが文字列リテラルを初めて使用するとき、Java は定数プール (定数プール) を使用して文字列リテラルをキャッシュすることです。文字列リテラルが使用されるとき、Java は直接定数プール (constantpool) 内の文字列リテラル。
ヒント:
- String クラスは典型的な immutable クラスであるため、作成した String オブジェクトを変更することはできず、String オブジェクトの共有による混乱を心配する必要はありません。
- 定数プール (定数プール) は、コンパイル時に決定され、コンパイルされた .class ファイルに保存されるデータを指します。これには、クラス、メソッド、インターフェイスに関する定数と文字列リテラルが含まれます。
次のプログラムを見てください。
String s0 = "hello";
String s1 = "hello";
String s2 = "he" + "llo";
System.out.println(s0 == s1);
System.out.println(s0 == s2);
操作の結果は次のようになります。
true
true
Java では、各文字列定数が 1 つだけ存在し、複数のコピーが作成されないようにします。この例の s0 と s1 の「hello」はすべて文字列定数であり、コンパイル時に決定されるため、 s0 = s1
は true を返します。 “he” と “llo” は両方とも文字列定数でもあります。文字列が複数の文字列定数で連結されている場合、それも文字列定数であり、s2 もコンパイル時に文字列定数に解析されます。したがって、s2 は参照でもあります。一定のプールで「こんにちは」に。したがって、プログラム出力s0 == s1
true を返し、 s1 == s2
も true を返します。