Co-op! -> Java言語 -> 言語リファレンス -> リテラル
http://www.ecoop.net/coop/
Copyright(c) 2003 Co-op!!

リテラル

Javaのリテラルには整数型、浮動小数点型、論理値型、文字型、文字列型、NULLがあります。

整数リテラル

整数リテラルは一般的に馴染みのある10進数値のほかに、8進数、16進数による表現が可能です。 以下に有効な整数リテラルを示します。


・10進数表記
 0-9の数字を並べたもの。負を表現する場合マイナスをつける
	0
	123
	-5460
	2147483647
・8進数表記
 0で始まり、0-7の数字を並べたもの。マイナスは不可(後述)
	0123
	076721
	017777777777
・16進数表記
 0xまたは0Xで始まり、0-9a-fA-Fの数字/文字を並べたもの。マイナスは不可(後述)
	0xff
	0X102a
	0XCaFe
	0x7fffffff

Javaでは整数リテラルはデフォルトでint型(32bits)として扱われますが、long型(64bits)で表現することも可能です。long型にしたい場合、最後に大文字か小文字のL,lをつけます。lは1と間違いやすいのでLを使いましょう。


256L
0124L
0xABCDEFL

int型の有効範囲は-2147483648(-231)~2147483647(231-1)です。16進数及び8進数では、2147483647は0x7fffffff 及び 017777777777、-2147483648は0x80000000 及び 020000000000になる。16進数と8進数の、int型における最大値である0xffffffff、037777777777は10進数の-1を表現します。ちなみに、Integer.MIN_VALUE は -2147483648、Integer.MAX_VALUE は 2147483647 を意味する定数です。

long型の有効範囲は-9223372036854775808L(-263)~9223372036854775807L(263-1)です。0x7fffffffffffffffL 及び 0777777777777777777777L は 9223372036854775807Lを表し、0x8000000000000000L 及び 01000000000000000000000L は -9223372036854775808L を表し、 0xffffffffffffffffL 及び 01777777777777777777777L は-1L を表します。 ちなみにLong.MIN_VALUE 及び Long.MAX_VALUE はそれぞれlongの最小値、最大値を表す定数です。

浮動小数点リテラル

Javaで浮動小数点値を扱うときは以下のようにします。


3.141592
.123  ( = 0.123)
5.    ( = 5.0)
1.5e10( = 15000000000)
4.e-5 ( = 0.00004)

Javaの浮動小数点型にはfloat型(単精度浮動小数点型 = 32bits)とdouble型(倍精度浮動小数点型 = 64bits)があり、接尾語のf,F,d,Dによって設定する。なお、デフォルトではdouble型になる。


6f      ( = float型 6.0)
40.F    ( = float型 40.0)
.5678d  ( = double型 0.5678)
3.14e+2D( = double型 314.0)

float型、double型のリテラルを8進数あるいは16進数で表現したい場合、intをfloatに変換するFloat.intBitsToFloat(int)やlongをdoubleに変換するDouble.longBitsToDouble(long)を使う。


Float.intBitsToFloat(05671)
Double.longBitsToDouble(0x400921FB54442D18L)

正の有限の範囲はfloatで1.40239846e-45f~3.40282347e+38f、doubleで4.94065645841246544e-324~1.79769313486231570e+308で、これはそれぞれFloat.MIN_VALUE 及び Float.MAX_VALUE、Double.MIN_VALUE 及び Double.MAX_VALUE という定数に等しい。無限大を表すにはFloat,Doubleの両クラスのPOSITIVE_INFINITY(正の無限大) 及び NEGATIVE_INFINITY(負の無限大)を使い、非数値を表すにはFloat.NaN、Double.NaN(Not a Number)を使います。

論理値リテラル

論理リテラルにはboolean型の二つのリテラルしか存在しません。すなわち、true(真)とfalse(偽)です。


true
false

文字リテラル

文字リテラルはchar型で、1つの文字かエスケープシーケンスをアポストロフィ(')で囲んだものです。はじめの'から終わりの'までの間に改行があってはいけません。


'a'
'3'
'\n'
'\''
'\\'
'\uFFFF'
'α'
'あ'
'漢'

文字列リテラル

文字列リテラルはString型で、0個以上の文字を二重引用符(")で囲んだものです。はじめの"から終わりの"までの間に改行があってはいけません。


""
"abcdefg"
"hello, world!\n"
"\""
"あいうえお"

また、文字列の連結には+を使うことができます。


"abc" + "def"
"今日の天気は" + // 式なので改行を入れられる
"晴れです。"

String型はクラスなので、リテラルはオブジェクトとなり、変数にはデータへの参照が格納される。そのため、


String hello = "Hello", lo = "lo";

と宣言した場合、


1. (hello == "hello")はtrueを返し、

2. (hello == ("hel"+"lo"))はtrueを返すが、

3. (hello == ("hel"+lo))はfalseを返す。

という結果になる。定数式はコンパイル時に連結されるため2の場合も1と同等になりますが、3の場合実行時にオブジェクトが新規に作成され、helloと("hel"+lo)が別のオブジェクトを指し示すことになり、その結果オブジェクト同士の比較(A == B)においては同等ではないと判断されることになる。これを避けるには以下のようにする。


※以下は両方ともtrueを返す。
4. (hello.equals("hel"+lo))
5. (hello == ("hel"+lo).intern())

4は参照先が等しいかどうかで判断するのではなく、データが等しいかで判断するためtrueになり、5はinternメソッドを用い、既存のオブジェクトにデータが等しいものがある場合にそれを参照先として返しているため、trueになります。

エスケープシーケンス

\から始まる2文字を指してエスケープシーケンスと呼びます。エスケープシーケンスは文字・文字列リテラルで、一般的に、直接文字として表現できないものなどを表現するために使います。以下がエスケープシーケンスの一覧です。


\b          バックスペース(=\u0008)
\t          水平タブ(=\u0009)
\n          ラインフィード(一般的な改行の表現に使う)(=\u000a)
\f          フォームフィード(=\u000c)
\r          キャリッジリターン(=\u000d)
\"          二重引用符(=\u0022)
\'          一重引用符(=\u0027)
\\          \自身(=\u005c)
\000~\377  \u0000~\u00ff

ちなみに\uではじまる4桁の数値はUnicode文字を意味しており、エスケープシーケンスと異なりコンパイルの直前にUnicode文字に変換されます。

空リテラル

空型のリテラルはただ一つnullだけです。 参照がからっぽであることを表現するにはnullを使います。


null


http://www.ecoop.net/coop/
Copyright(c) 2003 Co-op!!