Java を学び始めると必ず出てくるのが
「暗黙の型変換(自動変換)」と「明示的キャスト」 というテーマ。
数字の型を変えるだけなのに、
「なんでエラーになるの?」
「なんでこれは勝手に変換されるの?」
と、最初は少し混乱しがちです。
この記事では、やさしく・実務寄りに
この2つの違いを整理していきます。
まずはコードを確認
Java
int a = 10;
long b = a; // 暗黙の型変換(OK)
long x = 100;
int y = (int) x; // 明示的キャスト(OK)
long z = 10000000000L;
int w = (int) z; // 明示的キャスト(値が壊れる可能性あり)コードのしくみを解説
暗黙の型変換(自動で変わる)
Java は 安全に変換できる場合だけ 自動で型を変えてくれます。
代表例:
int → longfloat → doublechar → int
つまり 「入れ物が大きくなる方向」 の変換は自動で OK。
int → long → float → double
イメージ
- 小さいコップの水を大きいコップに移す
- こぼれる心配がないので自動でやってくれる
明示的キャスト(自分で変換を指示する)
逆に、データが失われる可能性がある変換 は Java が勝手にやってくれません。
代表例:
long → intdouble → floatint → byte
この場合は、次のように自分でキャストを書く必要があります。
Java
int y = (int) x;イメージ
- 大きいコップの水を小さいコップに移す
- こぼれる可能性があるので「本当にやる?」と確認される
- その確認が「(int)」というキャスト
明示的キャストは「値が壊れる」ことがある
特に注意したいのがこれ。
Java
long z = 10000000000L;
int w = (int) z;int の最大値は 2,147,483,647 のため、 10,000,000,000 は入りません。
結果、オーバーフローして全く別の値になる ことがあります。
実務ではこの“値が壊れる”現象がバグの原因になりがちです。
あわせて知っておきたいポイント
計算式の中でも暗黙の型変換が起きる
Java
int a = 10;
double b = a * 1.5; // a が double に変換される計算式の中では、
より大きい型に合わせて自動変換される というルールがあります。
byte / short は計算すると int になる
Java の少しクセのある仕様。
Java
byte a = 10;
byte b = 20;
byte c = (byte) (a + b); // a + b は int になるa + b の結果は int になるため、 byte に戻すにはキャストが必要です。
char と int の変換もよく使う
Java
char c = 'A';
int code = c; // 65 に変換される文字コードを扱うときに便利です。
使うときに気をつけたいこと
- 暗黙の型変換は「安全な方向」だけ
- 明示的キャストは「値が壊れる可能性」を常に意識する
- 特に long → int、double → float は要注意
- 計算式の中で勝手に型が変わることを忘れない
- byte / short の計算は int になることを覚えておく
実務では、型変換の理解が浅いと
「なぜか値が変わってる…」というバグにつながりやすいです。
まとめ
暗黙の型変換
- 安全な方向(小 → 大)だけ自動で変換
- 例:int → long、float → double
明示的キャスト
- データが失われる可能性があるときに必要
- 例:long → int、double → float
- 値が壊れる可能性があるので慎重に

decopon
型変換は、Java の中でも“地味だけど重要”なテーマ。 ここをふわっと理解しておくだけで、 計算処理やデータ変換のバグを大きく減らせます。
あなたの学びが、次のステップにつながりますように。

moco
大きいコップから小さいコップに移すときは注意だよ。
キャストは「ほんとにやる?」のサインなんだって。

コメント