Javaの型変換(キャスト)を初心者向けに理解する
では、Javaの 型変換(キャスト) を初心者向けに、かみ砕いて、たくさんの例を交えて解説します。
Javaでは 変数には必ず型がある ので、異なる型の値を代入するときは注意が必要です。
1. 型変換の基本ルール
- 同じ型同士 → そのまま代入できる
int a = 10; int b = 20; b = a; // OK - 型が違う場合 → エラーになることがある
int a = 10; double d; d = a; // OK(int → double は自動で変換) double e = 3.14; int c; c = e; // エラー(double → int は自動変換されない)
2. 自動型変換(拡大変換)
「扱える範囲が狭い型 → 広い型」の場合、自動で変換されます。
例
int i = 100;
double d = i; // int → double に自動変換
System.out.println(d); // 100.0
Java- intは整数しか扱えませんが、doubleは小数も扱えるので安全に変換できます。
- char → int も自動で変換されます。
char ch = 'A';
int num = ch;
System.out.println(num); // 65 (Aの文字コード)
Java3. キャスト演算子で型変換(縮小変換)
「扱える範囲が広い型 → 狭い型」は自動で変換されません。
その場合は キャスト を使います。
例
double d = 3.14;
int i = (int) d; // キャストして整数に変換
System.out.println(i); // 3(小数は切り捨て)
Java(int)の部分がキャスト演算子です。- キャストすると、値が変わる可能性があります(小数点は切り捨て、大きな数はオーバーフロー)。
4. 範囲を超えた値のキャストに注意
long big = 1234567890123L;
int small = (int) big; // intの範囲を超えている
System.out.println(small); // 意図しない値になる
Java- intは約±21億までしか扱えないので、範囲を超えると「ぐちゃぐちゃ」な値になります。
- キャストは便利ですが、安全な値か確認することが大事です。
5. 数値リテラルと型変換の例外
小さなリテラルなら、キャストなしでも代入できる場合があります。
byte b = 10; // OK(10はbyteの範囲)
short s = 100; // OK(100はshortの範囲)
char c = 65; // OK(文字コード65)
Javaでも変数から代入すると自動変換はされません:
int i = 100;
byte b = i; // エラー
Java6. 初心者向けまとめ
- 「小さい型 → 大きい型」は自動で変換される
- 「大きい型 → 小さい型」はキャストが必要
- キャストすると値が変わることがある(切り捨てやオーバーフロー)
- 数値リテラルは一部キャスト不要
7. 練習問題
問題1
int i = 50;
double d = i; // この行はOK?
Java問題2
double d = 3.99;
int i = d; // この行はOK?
Java問題3
double d = 3.99;
int i = (int) d; // 出力は?
Java問題4
long big = 3000000000L;
int small = (int) big; // 出力は?
Java問題5
int i = 100;
byte b = i; // この行はOK?
Java8. 練習問題の解答
1️⃣ OK(int → doubleは自動変換される)
2️⃣ エラー(double → intは自動変換されない)
3️⃣ 3(小数点以下切り捨て)
4️⃣ -1294967296(オーバーフローして予期しない値になる)
5️⃣ エラー(int → byteは自動変換されない)
ポイント
- 型変換は「安全かどうか」で自動か手動かが決まります。
- キャストは「自己責任で変換する」というイメージ。
- 初心者はまず「小さい型→大きい型」はOK、「大きい型→小さい型」はキャスト必須、と覚えましょう。
