🟢 はじめに
Javaの学習を進めていると、必ず出会うのが「型変換(キャスト)」です。
「暗黙の型変換?」「キャスト式?」と、最初は頭が混乱してしまうかもしれません。
Javaのデータ型を「色々なサイズの箱」に例えれば、シンプルに理解できると思います。
今回は、初心者がつまずきやすい「型変換のルール」と「注意点」を、例え話と一緒に解説します!
📦 まずは基本:データ型=「箱のサイズ」
Javaには、数字を入れておくための「箱」がいくつか用意されています。
まずは、よく使う3つの箱のサイズを覚えておきましょう!
-
byte👛(めちゃくちゃ小さい箱:-128 ~ 127までしか入らない) -
int👝(普通のサイズの箱:よく使う整数が入る) -
double🧳(特大の箱:細かい小数までたっぷり入る)
この「箱のサイズ」を意識しながら、実際のコードを見てみましょう。
💻 サンプルコードを見てみよう
public class TypeCastExample {
public static void main(String[] args) {
// パターン1:安全なお引っ越し(暗黙の型変換)
int normalBox = 50; // 普通の箱(int)に50を入れる
double bigBox = normalBox; // 普通の箱の中身を、特大の箱(double)に移す
System.out.println("安全な変換: " + bigBox); // 結果:50.0
// パターン2:無理やり押し込む!(キャスト)
double tallPerson = 175.8; // 特大の箱(double)に小数を入れます
int height = (int)tallPerson; // 普通の箱(int)に無理やり押し込む!
System.out.println("切り捨て発生: " + height); // 結果:175
// パターン3:限界突破で大事故!?(byte型のオーバーフロー)
int overLimit = 130; // 普通の箱(int)に130を入れる
byte smallBox = (byte)overLimit; // 極小の箱(byte)に無理やり押し込む!
System.out.println("メーター一周: " + smallBox); // 結果:-126
}
}
それぞれのパターンで何が起きているのか、詳しく解説します!
パターン1:安全なお引っ越し(暗黙の型変換)
小さい箱 ➡️ 大きい箱
int normalBox = 50;
double bigBox = normalBox;
普通の箱(int)に入っている「50」を、特大の箱(double)に移し替えています。
小さい箱の中身を大きい箱に入れるのは、こぼれる心配がないので安全です!
そのため、Javaは「何も言われなくても勝手に(暗黙的に)」変換してくれます。
特大の箱は小数用なので、自動的に 50.0 という形になります。
パターン2:無理やり押し込む!(キャスト)
大きい箱 ➡️ 小さい箱
double tallPerson = 175.8;
int height = (int)tallPerson;
今度は逆です。
特大の箱(double)に入っている「175.8」を、普通の箱(int)にムリヤリ押し込もうとしています。
普通にやろうとすると、Javaは「入りきらなくて中身がこぼれちゃうよ!」とエラーを出して止めてしまいます。
そこで、「こぼれてもいいから、自己責任でムリヤリ入れて!」とJavaにお願いするサインが (int) のようなキャスト式です。
ただし、大きな代償があります。
整数の箱には小数が入れないため、小数点以下は容赦なく「切り捨て(ゴミ箱行き🗑️)」になります。
四捨五入ではなく、スパッと切り捨てられるので、結果は 175 になってしまいます。
パターン3:限界突破で大事故!?(オーバーフロー)⚠️
限界を超える数字をムリヤリ入れたらどうなるか?
int overLimit = 130;
byte smallBox = (byte)overLimit;
ここが一番の注意ポイントであり、資格試験などでも超頻出の罠だと言われています。
極小の箱である byte は、「最大で 127」までしか入りません。
そこに 130 を (byte) を使ってムリヤリ押し込むとどうなるでしょうか?
車やゲームのメーターを想像してみてください。
「999」の次に「000」に戻るように、限界を突破すると一番下の数字にぐるっと一周して戻ってしまいます。
-
byteの限界は127 -
128になると、メーターが一周して一番小さい-128になる -
129になると、-127になる -
130なので、結果は-126になる
このように、キャストを使ってムリヤリ型変換をすると、気づかないうちに全く違う数字に化けてしまい「バグの元」になるので注意が必要です。
📝 まとめ
-
小さい箱 ➡️ 大きい箱: 安全!Javaが自動でやってくれる(暗黙の型変換)
-
大きい箱 ➡️ 小さい箱: 危険!
(int)などのサインが必要(キャスト) -
キャストの注意点: 小数点以下は「切り捨て」られ、箱の限界を超えると「メーターが一周」して変な数字になる
Java学習中の方の参考になれば幸いです🙌