本文へスキップ
BecomeCoder

Java文法コース · 第2章 変数と型 ― データを入れる箱 · レッスン7

型変換とキャスト

ブラウザで完結

導入

intdouble を混ぜて計算したいことはよくあります。型が違う値を変換する「キャスト」を覚えると、割り算の切り捨て問題もコントロールできます。

説明

型の変換には2種類あります。

public class Main {
    public static void main(String[] args) {
        int i = 10;
        double d = i;            // int → double は自動(値が失われないので安全)
        System.out.println(d);   // 10.0

        double pi = 3.9;
        int n = (int) pi;        // double → int は明示的にキャストが必要
        System.out.println(n);   // 3(小数点以下は切り捨て・四捨五入ではない)
    }
}
  • 自動変換(拡大変換)int → double のように「情報が失われない」向きの変換は、書くだけで自動で行われます。
  • キャスト(縮小変換)double → int のように「情報が失われる」向きは、(int) のように 変換先の型をかっこで前置 して、プログラマが明示します。小数点以下は切り捨てられます(四捨五入ではありません)。

整数どうしの割り算を小数で得たいときも、キャストが使えます。

public class Main {
    public static void main(String[] args) {
        int a = 7, b = 2;
        System.out.println(a / b);            // 3
        System.out.println((double) a / b);   // 3.5(a を double 化してから割る)
    }
}

やってみよう

下のエディタで (double) a / b(double)(a / b) の結果の違いを比べてみましょう(かっこの位置で結果が変わります)。

演習

inttotal45)と intcount2)から、平均を小数で 求めて表示してください(結果は 22.5)。

ヒント1を見る

total / count のままだと整数の割り算になって 22 になってしまいます。

ヒント2を見る

(double) total / count のように、割る前に片方を double 化します。

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。