続・とってもわかりやすいJAVA 【第21回 型変換②】

この記事は2015年10月25日に書かれたものです。内容が古い可能性がありますのでご注意ください。


今回は引き続き型変換について説明していきます!
前回は「暗黙的型変換」について扱いましたので、今回は「明示的型変換」についてです。

明示的型変換は「キャスト」とも言われ、暗黙的型変換では不可能だった型変換を可能にします。
構文は以下の通りです。

(変換したい型)変換したい値;

ではサンプルプログラムをみてみましょう!

■サンプルプログラム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);
    }
} 

実行結果

キャスト2

■解説

このサンプルプログラムは、

  1. テストを受けた人数
  2. 全員の合計点
  3. 平均点

を求めるためのプログラムです。
しかし間違いがあります。
よくみると、平均点が間違ってますね。
本来なら「64.2」になるはずです。

では11行目に注目してみましょう。
左辺のavgはdouble型ですが、右辺はint / intです。
つまりint型からdouble型へと暗黙的型変換が行われているのです。
したがって、11行目を以下のように変更します。

avg = (double)sum / people;

すると平均点が正しく表示されるようになます。

キャスト3

double / intの計算結果はdouble型で返ってきます。
このように平均を求める場合はint/intで結果がdoubleになることが多いです。
そういうときはぜひキャストを利用してみてください。

  • このエントリーをはてなブックマークに追加

PAGE TOP