データ型
Javaのデータ型は、大きく基本型(プリミティブ型)と参照型に分類できます。
┣基本型
┃ ┣論理型
┃ ┃ ┗boolean … 真偽型(true、またはfalse)
┃ ┣整数型
┃ ┃ ┣byte … 1バイト符号付き整数(-128~127)
┃ ┃ ┣short … 2バイト符号付き整数(-32768~32767)
┃ ┃ ┣int … 4バイト符号付き整数(-2147483648~2147483647)
┃ ┃ ┗long … 8バイト符号付き整数(-9223372036854775808~9223372036854775807)
┃ ┣浮動小数点型
┃ ┃ ┣float … 4バイト浮動小数点数(±1.40239846×10^-45~±3.40282347×10^38)
┃ ┃ ┗double … 8バイト浮動小数点数
┃ ┃ (±4.94065645841246544×10^-324~±1.79769313486231570×10^308)
┃ ┗文字型
┃ ┗char … UNICODE文字(u0000~uffff)
┗参照型
┣クラス型 … データ(フィールド)と手続き(メソッド)を持つデータ構造
┣インターフェイス型 … 「インターフェイス」を参照
┗配列型 … 値の集合
true/falseのいずれかしか持たない型です。
boolean flag = 1;
整数型には、byte、short、int、longなどの型があります。ただし、byteはバイトデータを表すための型なので、整数を表すための用途であれば、short、int、long型のいずれかを利用すべきです。
short、int、longの違いは、表現できる値の範囲だけです。基本はint型を利用し、それで不足の場合のみlong型を利用してください。short型を利用する機会はほとんどありません。
byte b = -128; short s = 32767; int i1 = 1_380; // 桁区切り記号「_」も利用可(Java SE 7以降) int i2 = 010; // 8進数(0~) int i3 = 0xFF; // 16進数(0x~) int i4 = 0b0010; // 2進数(0b~。JavaSE 7以降) long l = 100;
整数型では、接頭辞として0b、0、0xを付与することで、それぞれ2進数、8進数、16進数を表すこともできます。2進数では0、1だけ、8進数では0~7、16進数では0~9に加えて、アルファベットのA~Fを利用できます。
また、桁区切り文字として、値に「_」を含めることも可能です(これはあくまで値の見やすさを目的とした表記で、Javaの処理に影響を与えるものではありません)。
リテラルでの型の特定
数値リテラルでは、型を指定しなかった場合、デフォルトでint型と見なされます。もしも明示的に型を特定したい場合には「L」(long型)を値の末尾に付与してください。
System.out.println(2147483648L);
浮動小数点型には、float、double型があります。両者の違いは、表現できる値の範囲だけです。まずはdouble型を優先して利用します。float値を表すには、リテラルのサフィックスとして「f」または「F」を指定してください。
浮動小数点型では指数表現も利用できます。「1.234E5」は「1.234×10^5」の意味です。大文字小文字を区別しません。
float f = 1.1234f; double d1 = 1.1234; double d2 = 1.1234E5; // 指数表現
char型は、Unicode(UTF-16)で単一の文字を表します。内部的には16ビットの整数(0~65535)として文字を表現します。リテラル値はシングルクォートで括ります。文字そのものを指定する他、uxxxxの形式で文字を表すこともできます。
char c1 = 'あ'; char c2 = '¥u5f01'; // 16進数の文字コード表現
また、「~」の形式で改行やタブなど、特殊な制御文字を表現することもできます。このような表記をエスケープシーケンスと言います。
主なエスケープシーケンス | |
---|---|
エスケープシーケンス | 概要 |
n | 改行(ラインフィード) |
t | タブ文字 |
b | バックスペース |
r | キャリッジリターン |
f | フォームフィード |
‘ | シングルクォート |
“ | ダブルクォート |
\ | ダバックスラッシュ |
xxx | 8進数の文字 |
uxxxx | Unicode文字 |
Javaの基本型には、複数の文字を表す文字列型はありません。文字列型はStringというクラスとして提供されています。詳しくは、「文字列」の節を参照してください。
配列型配列は、複数の値をまとめて扱うためのしくみです。たとえば以下は、int型の配列(要素数は5個)を作成する例です。配列を表すにはは、型名の後ろに「[]」を付与します。
int[] data = new int[5];
配列の要素にアクセスするには、ブラケット構文([…])で要素の番号(インデックス)を指定します。要素のインデックスは0からスタートします。よって、要素数が5個の配列では、インデックス0~4で要素にアクセスできます。
data[0] = 10; System.out.println(data[0]); // 結果:10
lengthフィールドで、配列のサイズも取得できます。インデックスの上限は「length – 1」で表現できます。
System.out.println(data.length); // 結果:5
また、配列は宣言時に、まとめて中身を初期化しても構いません。たとえば以下では、要素として1、2、3を持つint配列を作成しています。
int[] data2 = { 1, 2, 3 };
配列の要素として配列を指定することもできます。その性質を利用して、多次元配列を生成することもできます。多次元配列にアクセスするには、次元の数だけブラケットを連ねます。
int[][] data3 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; System.out.println(data3[0][2]); // 結果:3