今回は引き続き型変換について説明していきます!
前回は「暗黙的型変換」について扱いましたので、今回は「明示的型変換」についてです。
明示的型変換は「キャスト」とも言われ、暗黙的型変換では不可能だった型変換を可能にします。
構文は以下の通りです。
(変換したい型)変換したい値;
ではサンプルプログラムをみてみましょう!
■サンプルプログラム1
class CastSample_01 { public static void main(String[] args) { double d = 3.14; int i = (int)d; System.out.println("3.14をintに変換 → " + i); } }
実行結果
■解説
3行目でキャストを行っています。
double型の3.14という値をint型に変換しています。
この場合、整数では小数部を表すことができないため、切り捨てられてしまうことになります。
このようにキャストによって無理やり型変換を行うと、データに損失が起こるので注意が必要となります。
特に次のような場合に注意が必要となります。
■サンプルプログラム2
class CastSample_02 { public static void main(String[] args) { int[] score = { 78, 63, 89, 54, 37 }; int sum = 0; int people = score.length; double avg = 0; for(int i = 0; i < people; i++) { sum += score[i]; } avg = sum / people; System.out.println("人数 : " + people); System.out.println("合計 : " + sum); System.out.println("平均 : " + avg); } }
実行結果
■解説
このサンプルプログラムは、
- テストを受けた人数
- 全員の合計点
- 平均点
を求めるためのプログラムです。
しかし間違いがあります。
よくみると、平均点が間違ってますね。
本来なら「64.2」になるはずです。
では11行目に注目してみましょう。
左辺のavgはdouble型ですが、右辺はint / intです。
つまりint型からdouble型へと暗黙的型変換が行われているのです。
したがって、11行目を以下のように変更します。
avg = (double)sum / people;
すると平均点が正しく表示されるようになます。
double / intの計算結果はdouble型で返ってきます。
このように平均を求める場合はint/intで結果がdoubleになることが多いです。
そういうときはぜひキャストを利用してみてください。