Java Language
リテラル
サーチ…
前書き
1
、 0.333F
、 false
、 'X'
と"Hello world\n"
。
16進、8進、および2進リテラル
hexadecimal
数はhexadecimal
数の値です。 16桁の0-9
文字とAF
(大文字と小文字は関係ありません)があります。 AF
は10-16
表す。
octal
数はoctal
数の値で、 0-7
の数字が使用されます。
binary
数は、基数2の値で、 0
と1
数字が使用されます。
これらの数値はすべて同じ値110
ます。
int dec = 110; // no prefix --> decimal literal
int bin = 0b1101110; // '0b' prefix --> binary literal
int oct = 0156; // '0' prefix --> octal literal
int hex = 0x6E; // '0x' prefix --> hexadecimal literal
バイナリリテラル構文がJava 7で導入されたことに注意してください。
8進数のリテラルは、意味的なエラーのトラップになりやすい。小数のリテラルに先行する'0'
を定義すると、間違った値が返されます。
int a = 0100; // Instead of 100, a == 64
読みやすくするためにアンダースコアを使用する
Java 7以降、プリミティブな数値リテラルの数字のグループを区切るために、1つ以上のアンダースコア(_)を使用して可読性を向上させることができました。
たとえば、次の2つの宣言は同等です。
int i1 = 123456;
int i2 = 123_456;
System.out.println(i1 == i2); // true
これは、以下に示すように、すべてのプリミティブ番号リテラルに適用できます。
byte color = 1_2_3;
short yearsAnnoDomini= 2_016;
int socialSecurtyNumber = 999_99_9999;
long creditCardNumber = 1234_5678_9012_3456L;
float piFourDecimals = 3.14_15F;
double piTenDecimals = 3.14_15_92_65_35;
これは、2進数、8進数、16進数の接頭辞を使用しても動作します。
short binary= 0b0_1_0_1;
int octal = 07_7_7_7_7_7_7_7_0;
long hexBytes = 0xFF_EC_DE_5E;
以下の場所での配置を禁止する下線についてのいくつかの規則があります:
- 番号の先頭または終わりに(例えば
_123
または123_
有効ではありません ) - リテラル浮動小数点の小数点に隣接して(例えば
1._23
または1_.23
有効ではありません ) - FまたはL接尾辞に先立ち(例えば
1.23_F
または9999999_L
有効ではありません ) - 数字の文字列が期待されている位置で(例えば
0_xFFFF
有効ではありません )
リテラルのエスケープシーケンス
文字列と文字リテラルは、リテラルでは許可されない明示的な文字コードを可能にするエスケープメカニズムを提供します。エスケープシーケンスは、バックスラッシュ文字( \
)と1つ以上の他の文字で構成されます。文字列リテラルの両方で同じシーケンスが有効です。
エスケープシーケンスの完全なセットは次のとおりです。
エスケープシーケンス | 意味 |
---|---|
\\ | バックスラッシュ( \ )文字を示します。 |
\' | 一重引用符( ' )文字を示します |
\" | 二重引用符( " )文字を示します |
\n | 改行文字( LF )を示します。 |
\r | キャリッジリターン( CR )文字を示します。 |
\t | 水平タブ( HT )文字を示します |
\f | フォームフィード( FF )文字を示します。 |
\b | バックスペース( BS )文字を示します。 |
\<octal> | 0〜255の範囲の文字コードを示します。 |
上記の<octal>
は0〜255(10進数)の数字を表す1,2または3つの8進数( '0'から '7')で構成されます。
バックスラッシュに続けて他の文字が続くことは、無効なエスケープシーケンスであることに注意してください。無効なエスケープシーケンスは、JLSによってコンパイルエラーとして扱われます。
参照:
Unicodeエスケープ
上記の文字列と文字のエスケープシーケンスに加えて、JavaにはJLS 3.3で定義されているより一般的なUnicodeエスケープメカニズムがあります。 Unicodeエスケープ 。 Unicodeエスケープの構文は次のとおりです。
'\' 'u' <hex-digit> <hex-digit> <hex-digit> <hex-digit>
ここで<hex-digit>
の一つである'0'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'a'
'A'
'B'
'C'
'D'
'E'
'F'
'a'
、 'b'
'a'
、 'b'
、 'c'
、 'd'
、 'e'
、 'f'
、
Unicodeエスケープは、Javaコンパイラによって文字(厳密には16ビットのUnicode コード単位 )にマッピングされ、マッピングされた文字が有効なソースコードのどこでも使用できます。リテラルで非ASCII文字を表現する必要がある場合は、文字と文字列リテラルでよく使用されます。
正規表現でエスケープする
未定
10進整数リテラル
整数リテラルは、 byte
、 short
、 int
、 long
またはchar
インスタンスが必要な場所で使用できる値を提供します。 (この例では、単純な小数点型を中心に説明します。他の例では、8進数、16進数、2進数のリテラルの使い方と、可読性を高めるためのアンダースコアの使用方法について説明しています。
普通の整数リテラル
整数リテラルの最も簡単で一般的な形式は、10進整数リテラルです。例えば:
0 // The decimal number zero (type 'int')
1 // The decimal number one (type 'int')
42 // The decimal number forty two (type 'int')
先行ゼロに注意する必要があります。先頭のゼロは、整数リテラルを10 進数ではなく8進数として解釈します。
077 // This literal actually means 7 x 8 + 7 ... or 63 decimal!
整数リテラルは符号なしです。あなたが何か表示されている場合は-10
または+10
、これらは実際には単項使用して表現されている-
と単項+
演算子を。
このフォームの整数リテラルの範囲は、 int
型の固有の型を持ち、0から2 31または2,147,483,648の範囲でなければなりません。
2 31はInteger.MAX_VALUE
より1
大きいことに注意してください。 0〜リテラル2147483647
どこでも使用することができ、使用するためにコンパイルエラーである2147483648
先行単項なし-
演算子。 (つまり、 Integer.MIN_VALUE
の値を表現するために予約されています)。
int max = 2147483647; // OK
int min = -2147483648; // OK
int tooBig = 2147483648; // ERROR
長い整数リテラル
long
型のリテラルは、 L
接尾辞を追加して表現します。例えば:
0L // The decimal number zero (type 'long')
1L // The decimal number one (type 'long')
2147483648L // The value of Integer.MAX_VALUE + 1
long big = 2147483648; // ERROR
long big2 = 2147483648L; // OK
int
リテラルとlong
リテラルの区別は、他の場所でも重要であることに注意してください。例えば
int i = 2147483647;
long l = i + 1; // Produces a negative value because the operation is
// performed using 32 bit arithmetic, and the
// addition overflows
long l2 = i + 1L; // Produces the (intuitively) correct value.
ブールリテラル
ブールリテラルは、Javaプログラミング言語のリテラルの中で最もシンプルです。 2つの可能なboolean
値は、 true
とfalse
リテラルで表されfalse
。大文字と小文字が区別されます。例えば:
boolean flag = true; // using the 'true' literal
flag = false; // using the 'false' literal
文字列リテラル
文字列リテラルは、Javaソースコードの文字列値を表す最も便利な方法を提供します。文字列リテラルは次のもので構成されます。
- 二重引用符(
"
)で始まります。 - 二重引用符または改行文字ではない0個以上の他の文字。 (バックスラッシュ(
\
)文字は後続の文字の意味を変更します; リテラルのエスケープシーケンスを参照してください)。 - 閉じた二重引用符文字。
例えば:
"Hello world" // A literal denoting an 11 character String
"" // A literal denoting an empty (zero length) String
"\"" // A literal denoting a String consisting of one
// double quote character
"1\t2\t3\n" // Another literal with escape sequences
1つの文字列リテラルが複数のソースコード行にまたがらないことに注意してください。これは、リテラルの二重引用符の前に改行(またはソースファイルの終わり)が発生するコンパイルエラーです。例えば:
"Jello world // Compilation error (at the end of the line!)
長い文字列
行に収まらない文字列が必要な場合は、それを複数のリテラルに分割し、連結演算子( +
)を使用して連結します。例えば
String typingPractice = "The quick brown fox " +
"jumped over " +
"the lazy dog"
上記のような文字列リテラルと+
構成される式は 、 定数式の要件を満たします。これは、式がコンパイラによって評価され、実行時に単一のString
オブジェクトによって表されることを意味します。
文字列リテラルのインターン
文字列リテラルを含むクラスファイルがJVMによってロードされると、対応するString
オブジェクトはランタイムシステムによってインメモリーされます。これは、複数のクラスで使用される文字列リテラルが、1つのクラスで使用された場合よりもスペースを占有しないことを意味します。
インターンとストリングプールの詳細については、「文字列」トピックの「 ストリングプールとヒープ記憶域の例」を参照してください。
Nullリテラル
nullリテラル( null
として記述)は、null型の唯一の値を表します。下記は用例です
MyClass object = null;
MyClass[] objects = new MyClass[]{new MyClass(), null, new MyClass()};
myMethod(null);
if (objects != null) {
// Do something
}
null型はむしろ珍しいものです。名前はないので、Javaのソースコードで表現することはできません。 (また、実行時の表現もありません。)
ヌルタイプの唯一の目的は、のタイプになることですnull
。これは、すべての参照型と割り当て互換性があり、任意の参照型に型キャストできます。 (後者の場合、キャストは実行時の型チェックを必要としません)。
最後に、 null
は、型が何であってもnull instanceof <SomeReferenceType>
がfalse
に評価されるというプロパティを持っています。
浮動小数点リテラル
浮動小数点リテラルは、 float
またはdouble
インスタンスが必要な場合に使用できる値を提供します。浮動小数点リテラルには3種類あります。
- 簡単な10進数形式
- スケール小数点形式
- 16進形式
(JLSの構文規則では、2つの10進形式を1つの形式に結合しています。説明を簡単にするため、別々に扱います)。
接尾辞を使用して表現された、 float
とdouble
定数の異なるリテラル型があります。様々な形では、異なるものを表現するために文字を使用しています。これらの文字は大文字小文字を区別しません。
簡単な10進数形式
浮動小数点リテラルの最も単純な形式は、1つ以上の10進数字と小数点( .
)とオプションの接尾辞( f
、 F
、 d
またはD
)で構成されます。オプションの接尾辞を使用すると、リテラルがfloat
( f
またはF
)またはdouble
( d
またはD
)値であることを指定できます。デフォルト(接尾辞を指定しない場合)はdouble
です。
例えば
0.0 // this denotes zero
.0 // this also denotes zero
0. // this also denotes zero
3.14159 // this denotes Pi, accurate to (approximately!) 5 decimal places.
1.0F // a `float` literal
1.0D // a `double` literal. (`double` is the default if no suffix is given)
実際には、接尾辞が後に続く10進数字も浮動小数点リテラルです。
1F // means the same thing as 1.0F
10進リテラルの意味は、10進浮動小数点形式で表される無限精度の数学的実数に最も近い IEEE浮動小数点数です。この概念的な値は、最も近い値への丸めを使用してIEEEバイナリ浮動小数点表現に変換されます。 (十進数変換の正確なセマンティクスは、 Double.valueOf(String)
とFloat.valueOf(String)
指定されていますが、数字の構文に違いがあることにFloat.valueOf(String)
。
スケール小数点形式
スケーリングされた小数の形式は、 E
またはe
によって導入された指数部を持つシンプルな10進数で構成され、符号付き整数が続きます。指数部は、下の例に示すように、十進数に10の累乗を掛けるための短い手です。 float
とdouble
リテラルを区別するオプションの接尾辞もあります。ここではいくつかの例を示します。
1.0E1 // this means 1.0 x 10^1 ... or 10.0 (double)
1E-1D // this means 1.0 x 10^(-1) ... or 0.1 (double)
1.0e10f // this means 1.0 x 10^(10) ... or 10000000000.0 (float)
リテラルのサイズは、表現( float
またはdouble
)によって制限されます。スケール係数の値が大きすぎるか小さすぎると、コンパイルエラーです。
16進形式
Java 6からは、浮動小数点リテラルを16進数で表現することができます。 16進形式には、シンプルな小数形式と小数点以下の小数形式に似た構文がありますが、次の点が異なります。
- すべての16進浮動小数点リテラルはゼロ(
0
)で始まり、次にx
またはX
始まります。 - 数字の数字(ただし指数部ではありません !)には、
a
からf
までの16進数字とそれに相当する大文字も含まれます。 - 指数は必須であり、
e
またはE
代わりにp
(またはP
)という文字で導入されます。指数は、10の累乗ではなく2の累乗であるスケーリング係数を表します。
ここではいくつかの例を示します。
0x0.0p0f // this is zero expressed in hexadecimal form (`float`)
0xff.0p19 // this is 255.0 x 2^19 (`double`)
アドバイス:16進浮動小数点形式はほとんどのJavaプログラマーには馴染みがないので、あまり使用しないことをお勧めします。
下線
Java 7からは、浮動小数点リテラルの3つの形式のすべての数字ストリング内にアンダースコアを使用することができます。これは「指数部」の部分にも適用されます。 可読性を向上させるためのアンダースコアの使用を参照してください。
特殊なケース
浮動小数点リテラルが、選択した表現で表現するには大きすぎるか小さすぎる数を表す場合は、コンパイルエラーです。つまり、数値が+ INFまたは-INFにオーバーフローした場合、またはアンダーフローが0.0にオーバーフローする場合です。しかし、リテラルが非ゼロの非正規化数を表すことは合法です。
浮動小数点リテラル構文は、INFやNaNなどのIEEE 754特殊値のリテラル表現を提供しません。それらをソースコードで表現する必要がある場合は、 java.lang.Float
およびjava.lang.Double
定義された定数を使用することをお勧めしjava.lang.Double
。 Float.NaN
、 Float.NEGATIVE_INFINITY
、およびFloat.NEGATIVE_INFINITY
などFloat.POSITIVE_INFINITY
。
文字リテラル
文字リテラルは、Javaソースコードでchar
値を表現する最も便利な方法を提供します。文字リテラルは、
- 開始シングルクォート(
'
)文字。 - 文字の表現。この表現は、一重引用符または改行文字であってはいけませんが、バックスラッシュ(
\
)文字によって導入されたエスケープシーケンスであってもかまいません。 リテラルのエスケープシーケンスを参照してください。 - 閉じた一重引用符(
'
)文字。
例えば:
char a = 'a';
char doubleQuote = '"';
char singleQuote = '\'';
文字リテラルの改行はコンパイルエラーです。
char newline = '
// Compilation error in previous line
char newLine = '\n'; // Correct