Java データ型

に公開

基本型

基本型は以下の8種類です。
扱えるリテラルがそれぞれ異なります。

リテラル
byte 8ビット整数
short 16ビット整数
int 32ビット整数
long 64ビット整数
float 32ビット単精度浮動小数点数
double 64ビット倍精度浮動小数点数
char 16ビットUnicode文字
boolean true, false

小さい型は大きい型に自動で変換されます。
大きい型を小さい型に変換するときは、キャストが必要です。

/*
byte → short → int → long → float → double
                ↑
                char
*/
long l = 0;    // int → long
float f = l;    // long → float
double d = f;    // float → double
int i = (int)0.0;    // double → int → int

例外としてbyte short char型の変数に整数リテラルを代入する場合、
型が扱える値の範囲内であればキャストは不要です。

/*
byte -128~127
short -32768~32767
char 0~65535
*/
byte b = 127;    // int → byte
short s = 32767;    // int → short
char c = 65535;    // int → char

参照型

基本型以外のすべての型が該当します。
リテラルを格納する基本型の変数とは異なり、
参照型の変数はメモリ上に生成されたオブジェクトのアドレスを格納します。

String str1 = new String("A");
String str2 = new String("A");
System.out.println(str1 == str2);    // falseが出力される

上記のコードでは同値のStringオブジェクトを生成しString型の変数に代入していますが、
異なるオブジェクトは異なるアドレスを持つので同一性を比較するとfalseが戻されます。

参照型の変数にはnullを代入できます。
nullは、参照型の変数がアドレスを格納しないことを表すリテラルです。

String str = null;

基本型とは互換性がありません。

char c = "A";    // コンパイルエラー (String → char)
String str = 'A';    // コンパイルエラー (char → String)

ラッパークラス

リテラルをオブジェクトとして扱うためのクラス群であり、8種類存在します。
参照型なので、ラッパークラス型の変数はアドレスを格納しnullを許容します。
基本型と互換性があり、自動で変換が行われます。

Integer num1 = 0;    // int → Integer
int num2 = num1;    // Integer → int

Discussion