Okapi Project

型変換

バージョン
2004 年 01 月 18 日 Ver.1.0
作成者
T.Hirata ( Xware )

要約

ここでは Java の基礎知識としてデータ型の型変換についての解説をします。

目次


1. 型変換について

Java では、代入や演算で使用する変数にの型について暗示的に型変換が行われたり、明示的に型変換を行ったりする必要があります。

 

2. 拡張型変換

Java では、代入や演算において short 型から int 型への代入のように「精度の低い型→精度の高い型」の代入を行う場合、精度の低い型は精度の高い方の型に暗示的に型変換されます。

これを、拡張型変換と呼びます。

この拡張型変換はオペランドを 2 つ持つ演算式のにおいて、ある規則にのっとって行われます。

この規則を理解していないとコンパイルエラーとなるので注意が必要です。

 

 

拡張変換の規則
優先 拡張変換の規則
1 オペランドの一方が double 型の場合、他方も double 型に変換される
2 オペランドの一方が float 型の場合、他方も float 型に変換される
3 オペランドの一方が long 型の場合、他方も long 型に変換される
4 両方のオペランドは int 型に変換される

 

上記した表より、演算式は最小でもintに拡張変換されることがわかります。

したがって、以下のコードはコンパイルエラーとなります。

 

byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;   // b1,b2は int 型に変換されるため演算結果も int 型となる。

 

3. キャスト

代入や演算ににおいて暗示的な型が行われない場合、明示的に型変換を行うことをキャストといいます。

キャストは変換したい値(変数)の前に変換したい型を( )で囲みます。

 

キャストによる型変換
ケース
int 型を byte 型に変換 byte i = (byte)100;
long 型を int 型に変換 int i = (int)100L;
float 型を int 型に変換 int i = (int)f;    ※ f は変数

 

例えば、拡張変換で示したコンパイルエラーとなるソースコードの例はキャストすることで解決します。

 

byte b1 = 10;
byte b2 = 20;
byte b3 = (byte)(b1 + b2);   //演算結果はbyteにキャストされるのでOK


※ 以下の書き方はコンパイルエラーです。
byte b3 = (byte)b1 + (byte)b2;

 

このようにキャストを行えば精度の高い型を精度の低い型に変換することが可能となりますが、次のようなことをした場合は、値が変わる恐れがあります。

 

int i = (int)12.5F;
System.out.print(i);

プログラムの実行結果は以下のようになります。

12

 


Copyright © 2003 - 2006 Okapi Project All Rights Reserved.