【プログラミングしてみよう76】Javaのキャストと型変換のすべて

Java

前回はプリミティブ型とラッパークラスの違いを学びました。

今回は「キャストと型変換」について解説します。数値型間の変換・オブジェクトのキャスト・文字列との変換など、よく使う型変換をまとめます。

数値型の変換

数値型には「拡大変換」と「縮小変換」があります。

拡大変換(自動): byte → short → int → long → float → double
縮小変換(キャストが必要): double → float → long → int → short → byte

サンプルコード

ファイル作成

「Java64」フォルダに CastTest.java という名前でファイルを作成します

コード入力

public class CastTest {
    public static void main(String[] args) {
        // 数値型の拡大変換(自動)
        int i = 100;
        long l = i;       // int → long(自動)
        double d = i;     // int → double(自動)
        System.out.println("int→long: " + l);
        System.out.println("int→double: " + d);

        // 数値型の縮小変換(キャストが必要・精度が落ちる)
        double pi = 3.14159;
        int piInt = (int) pi;  // 小数点以下が切り捨て
        System.out.println("double→int: " + piInt);

        long bigNum = 1234567890123L;
        int truncated = (int) bigNum; // 上位ビットが失われる
        System.out.println("long→int(桁あふれ): " + truncated);

        // 文字列への変換
        System.out.println("\n--- 文字列への変換 ---");
        int num = 42;
        String s1 = String.valueOf(num);
        String s2 = Integer.toString(num);
        String s3 = "" + num;            // 簡易だが非推奨
        System.out.println("valueOf: "   + s1);
        System.out.println("toString: "  + s2);
        System.out.println("+ \"\": "    + s3);

        // 文字列からの変換
        System.out.println("\n--- 文字列からの変換 ---");
        System.out.println("parseInt: "   + Integer.parseInt("123"));
        System.out.println("parseDouble: " + Double.parseDouble("3.14"));
        System.out.println("parseBoolean: " + Boolean.parseBoolean("true"));

        // 変換失敗時
        try {
            Integer.parseInt("abc");
        } catch (NumberFormatException e) {
            System.out.println("変換失敗: " + e.getMessage());
        }

        // オブジェクトのキャスト
        System.out.println("\n--- オブジェクトのキャスト ---");
        Object obj = "Hello, Java!";

        // 従来の書き方
        if (obj instanceof String) {
            String str = (String) obj;
            System.out.println("長さ: " + str.length());
        }

        // パターンマッチング(Java 16+)
        if (obj instanceof String str) {
            System.out.println("大文字: " + str.toUpperCase());
        }

        // ClassCastExceptionの例
        Object num2 = Integer.valueOf(42);
        try {
            String s = (String) num2; // IntegerをStringにキャストしようとする
        } catch (ClassCastException e) {
            System.out.println("ClassCastException発生");
        }
    }
}

コンパイル

javac CastTest.java

実行

java CastTest

実行結果は次のようになります。

int→long: 100
int→double: 100.0
double→int: 3
long→int(桁あふれ): 1912276171

--- 文字列への変換 ---
valueOf: 42
toString: 42
+ "": 42

--- 文字列からの変換 ---
parseInt: 123
parseDouble: 3.14
parseBoolean: true
変換失敗: For input string: "abc"

--- オブジェクトのキャスト ---
長さ: 12
大文字: HELLO, JAVA!
ClassCastException発生

型変換のまとめ

数値→数値      拡大変換は自動、縮小変換は(型)でキャスト
数値→文字列    String.valueOf() または toString()
文字列→数値    Integer.parseInt() / Double.parseDouble()
オブジェクト   instanceof で確認してからキャスト

まとめ

型変換はJavaプログラミングで頻繁に登場します。数値の縮小変換は精度が落ちること、文字列→数値変換では NumberFormatException に備えること、オブジェクトのキャストは instanceof で確認することを覚えておきましょう。

2026/08/24(月) ぱんまる

コメント

タイトルとURLをコピーしました