マンガで分かる Java入門講座

第4章 数値変数と演算子
4-5. キャスト

型を別の型に変換する「キャスト」という処理について紹介します。

● キャスト

 数値を表す型では、ある型から別の型に値を代入することができます。その際には注意が必要です。

 まずは、エラーが出る処理を示します。

ソースコード)エラーが出る処理
short s = 1000;
byte b = s;  // ←エラーが出る

 これは、16bitのサイズのshortから、8bitのサイズのbyteに、値を代入しようとしているためです。大きなサイズの型から、小さなサイズの型に値を代入すると、値の一部が失われる可能性があるのでエラーが出ます。

 逆に、小さなサイズの型から、大きなサイズの型に値を代入するのは問題ありません。

ソースコード)エラーが出ない処理
byte b = 100;
short s = b;  // ←問題ない

 大きなサイズの型から、小さなサイズの型に値を代入する際は「キャスト」という処理を行います。このキャストは「(変換する型)値」と書くことで行えます。

ソースコード)キャスト
short s = 1000;
byte b = (byte)s;  // ←エラーにならない

 ただし、この場合は注意が必要です。値の一部が失われる可能性があります。上記の場合は、内部的に以下のような処理が行われます。

説明)キャストの内部処理
10進数の「1000」は 2進数(short,16bit)では 「0000 0011 1110 1000」
↓
byte は 8bit なので 末尾8bitだけコピーする「XXXX XXXX 1110 1000」
↓
「1110 1000」は byteでは「-24」

● 浮動小数点数のキャスト

 浮動小数点数のdouble(大きなサイズの型)からfloat(小さなサイズの型)に値を代入する際にもキャストが必要になります。この場合は64bitから32biteへの代入なので精度が落ちます。

ソースコード)浮動小数点数のキャスト
double d = 1.0/3;
System.out.println(d);  // 「0.3333333333333333」と出力

float f = (float)d;
System.out.println(f);  // 「0.33333334」と出力

● 浮動小数点数から整数型へのキャスト

 浮動小数点数から整数型へのキャストも行えます。その際は、小数点以下が切り捨てられます。

ソースコード)浮動小数点数から整数型へのキャスト
float f = 3.1415f;
int i = (int)f;  // 変数iには3が入る
System.out.println(i);  // 「3」と出力

この講座のマンガ部分は「箱人形マンガ(Box Comic) 」で作成しています。
作成:2013/05/20  更新:2015/08/08  [Permalink]