基本のデータ型
変数宣言するときには変数名と同時に変数のデータ型を指定する必要があります。
データ型とは値の種類のことで整数や浮動小数点数、そして文字などです。Javaで用意されているデータ型は次の通りです。
データ型 | 値 |
---|---|
boolean | true or false |
char | 16ビットUnicode文字 ¥u0000~¥uFFFF |
byte | 8ビット整数 -128~127 |
short | 16ビット整数 -32768~32767 |
int | 32ビット整数 -2147483648~2147483647 |
long | 64ビット整数 -9223372036854775808~9223372036854775807 |
float | 32ビット単精度浮動小数点数 |
double | 64ビット倍精度浮動小数点数 |
例えば整数を保存するための変数でもいくつか用意されています。大きな値を保管できるデータ型を指定しておけば何でも大丈夫なように思えますが、大きな値を保管できるデータ型はコンピュータの資源を多く必要とします。そのため本当に必要なデータ型を使用することが大事です。
それではひとつひとつデータ型を確認していきます。
整数のデータ型
整数の値を格納するためのデータ型は格納する数値の大きさに合わせて4種類用意されています。
byte -128 ~ 127 short -32768 ~ 32767 int -2147483648 ~ 2147483647 long -9223372036854775808 ~ 9223372036854775807
※char型も整数のデータ型と考えることもできます。char型については後で解説します。
通常はint型で十分ですが極めて大きい数値を扱う場合にはlong型を使います。
なお数値リテラルの整数の値はint型の値として扱われます。つまり数値をプログラムの中で記述する場合はint型で格納できる範囲である-2147483648から2147483647までの数値しか記述できません。
そこでint型を越えるlong型の範囲の数値をプログラムの中で記述する場合は、数値の最後に「L」または「l」を付けます。
18000305032230531L 39433204432234523l
今後long型の変数に値を格納する場合などに、int型の範囲を超える数値を記述する場合には「L」や「l」を付けるのを忘れないように注意して下さい。
byte型やshort型を明示的に表すための文字はありません。その為、byte型やshort型の変数に値を代入する時は単に数値を記述します。
short s; s = 20;
20という数値はint型の値ですが自動的に型変換が行われて代入されます。ただしbyte型やshort型の範囲を超えた数値をそのまま代入するとエラーとなります。その場合はキャスト演算子を使って型の変換が必要となります。詳しくは「型変換」を参照して下さい。
浮動小数点数のデータ型
浮動小数点数の値を格納するためのデータ型は格納する数値の大きさに合わせて2種類用意されています。
float 32ビット単精度浮動小数点数 double 64ビット倍精度浮動小数点数
単精度浮動小数点数は負の値は -3.4028235E+38 ~ -1.401298E-45、正の値は 1.401298E-45 ~ 3.4028235E+38 の範囲の値をとります。倍精度浮動小数点数はの値は -1.79769313486231570E+308 ~ -4.94065645841246544E-324、正の値は 4.94065645841246544E-324 ~ 1.79769313486231570E+308 の範囲の値をとります。いずれの場合も極めて巨大な値から極めて小さい値まで扱うことができます。
なお数値リテラルの浮動小数点数の値はdouble型の値として扱われます。もしdouble型ほどの精度を必要としない場合には「F」または「f」を付けることでfloat型の数値として記述することができます。
1.223F 0.83f
何も付けなければデフォルトでdouble型の値となりますがdouble型を表す「D」または「d」を付けることも可能です。ただ通常は省略して何も記述しません。
浮動小数点数の値について詳しく書くのは専門的になるので省略しますが、浮動小数点数は実際には近似値を格納します。その為、誤差が生じる場合がありますので注意して下さい。(イメージとしては10÷3の結果のように割り切れない値を格納した時に、その近似値が格納されるため格納された値を取り出して3倍しても10にならない場合があります)。
文字のデータ型
1つの文字を格納するためのデータ型としてchar型が用意されています。
char 16ビットUnicode文字 ¥u0000~¥uFFFF
ここで1つの文字とは16ビットUnicodeで定義されている文字となりaやBなどの半角アルファベットだけではなく「あ」や「漢」など全角の文字も1つの文字として扱われます。格納する文字については「文字」や「文字コード」を参照して下さい。
なお文字を格納するために使われるchar型ですが実際にも文字コードを格納します。その為、16ビットの符号が無い整数を格納するためのデータ型と考えることができます。
char 0 ~ 65635
boolean型
boolean型は特別なデータ型で、格納できる値はtrueまたはfalseのいずれかだけです。
boolean true or false
このtrueおよびfalseはJavaであらかじめ定義された定数です。論理演算の結果などがtrueまたはfalseを返しますのでその値を格納するために使用されます。詳しくは論理演算のページを参照して下さい。
なおJavaでは「1」はtrueではなく「0」はfalseではありません。他のプログラミング言語では「0」がfalseで「0以外」はtrueとして扱われるようなものもありますがJavaではそのようには見なされませんので注意して下さい。
サンプル
では簡単なサンプルで試してみます。
class JSample4_1{ public static void main(String args[]){ int n; long l; double d; char c; boolean b; n = 100; l = 45333336854798037L; d = 32.45503; c = '朝'; b = true; System.out.println(n); System.out.println(l); System.out.println(d); System.out.println(c); System.out.println(b); } }
コンパイル後に実行すると次のように表示されます。
エラーとなるサンプル
次のサンプルではint型の変数にfloat型の値を代入しています。
class JSample4_2{ public static void main(String args[]){ int n; n = 1.43F; } }
コンパイルすると次のようにエラーとなります。
次はboolean型の変数にtrueとfalse以外の値を代入した場合です。
class JSample4_3{ public static void main(String args[]){ boolean b; b = 0; } }
コンパイルすると次のようにエラーとなります。
このようにboolean型の変数にはtrueまたはfalse以外の値は格納できません。
( Written by Tatsuo Ikura )