変数同士の代入や計算は、同じデータ型で行うのが基本ですが、
互いに異なるデータ型変数に対しても
代入や計算ができるようになっています。
これをキャスト(型変換)と言います。
表現能力の低い型から高い型へ代入する場合
byte b;
char c;
short s;
int i;
long l;
float f;
double d;
c = b;
i = s;
d = f;
この例の場合は、全く問題なくキャストが行われ、正常に代入されます。
表現能力の高い型から低い型へ代入する場合
byte b;
char c;
short s;
int i;
long l;
float f;
double d;
b = s;
s = i;
f = d;
この例の場合は、値が一部失われてしまう可能性があるので、
エラーが出ます。
スポンサーリンク
表現能力の高い型から低い型へ代入する場合 明示的な型変換(キャスト)
byte b;
char c;
short s;
int i;
long l;
float f;
double d;
b = (byte)s;
s = (short)i;
f = (float)d;
この場合も、型変換されますが、エラーは出ません。
つまり、この型変換はプログラマが了承済ですよ。という事を表しています。
異なるデータ型変数で計算する場合
byte b;
char c;
short s;
int i;
long l;
float f;
double d;
f = b * i + s / d;
①まず、b * i が行われますが、異なるデータ型なので、
表現能力の高い型に変換してから計算されます。
この場合は b が int 型に変換されて計算されます。
②次に s / d が行われますが、これも異なるデータ型なので、
この場合は s が double 型に変換されて計算されます。
③次は、① + ②の計算ですが、これも int 型と double 型なので、
この場合は、①が double 型に変換されて計算されます。
④最後に、f = ③となります。
基本的に、異なる型同士の計算は避けた方が無難です。
関数の引数として渡す場合
public static void kansu(double a) {
いろいろ
}
int i=50;
kansu(i);
kansu(100);
kansu(i) の場合は、int型変数を渡していますが、
この時にも型変換が行われ、
double型に変換されて kansu に渡されます。
次にkansu(100)の場合は、定数を渡していますが、
ここでも型変換され、
double型に変換されて kansu に渡されます。
極力、型変換は、使用しないようにプログラムを組むのが良いですが、
場合によるので、型変換が必須の時には、
多少複雑になる事が多いので、
コメントを多く記述する等、
プログラムを分かりやすくするようにしましょう。