0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaのオートボクシング/アンボクシングを整理してみる

0
Posted at

はじめに

未経験からJavaを学んでいると、

  • 「型変換」と
  • 「オートボクシング」

がごっちゃになりがちです。

この記事では オートボクシング/アンボクシングだけに絞って
まとめたいと思います。


結論

✅ オートボクシング = プリミティブ → オブジェクト
✅ アンボクシング = オブジェクト → プリミティブ
✅ 数値の「大きさ」は変わらない(ここ重要)


オートボクシングとは(int → Integer)

オートボクシングとは、

👉 プリミティブ型をラッパークラスに自動変換する仕組みです。


例①(基本)

int x = 10;
Integer y = x;   // 自動変換(オートボクシング)

何が起きているか?

  • int(ただの数値)
  • Integer(オブジェクト)

に変わっています。


例②(メソッドでよく起きる)

List<Integer> list = new ArrayList<>();
list.add(10);   // ← ここでオートボクシング

本来 add()Integer を受け取りますが、

  • 10(int)を渡すと
  • 自動で Integer に変換される

👉 これがオートボクシング


💡 ポイント

  • 数値の値は変わらない
  • 「型の種類」が変わるだけ
  • Javaが自動でやってくれる

アンボクシングとは(Integer → int)

アンボクシングは逆です。

👉 ラッパークラスをプリミティブ型に戻すこと


例①(基本)

Integer x = 10;
int y = x;   // 自動変換(アンボクシング)

例②(計算時に自動で起きる)

Integer a = 10;
Integer b = 20;

int sum = a + b;  // ← 内部でアンボクシングされる

このとき内部では:

  • Integerint に変換されてから
  • 計算されている

👉 これがアンボクシング


💡 ポイント

  • 計算・比較のときによく発生する
  • 意識しなくても自動で行われる

⚠️ 初心者がハマるポイント①:null問題

これはめちゃくちゃ重要です。

Integer x = null;
int y = x;   // ❌ エラー(NullPointerException)

なぜ?

  • null は「中身がない」
  • それを int に変換しようとして失敗

👉 アンボクシング時にクラッシュします


✔ 対策

if (x != null) {
    int y = x;
}

⚠️ 初心者がハマるポイント②:== 比較

Integer a = 100;
Integer b = 100;

System.out.println(a == b);  // true
  • 100 はキャッシュ範囲(-128〜127)
  • Javaが同じ Integer オブジェクトを使い回す

でも…

Integer a = 200;
Integer b = 200;

System.out.println(a == b);  // false

なぜ?

  • 200 はキャッシュ範囲外
  • 毎回 new Integer(200) みたいに新しく作られる
  • Integer はオブジェクト
  • == は「中身」ではなく「参照」を比較
// 100の場合
 a ─┐
    ├── [Integer(100)]
 b ─┘

// 200の場合
 a ──> [Integer(200)]
 b ──> [Integer(200)]   別物

✔ 正しい比較方法

a.equals(b);

イメージで理解する

📦 オートボクシング

  • int = 中身だけ
  • Integer = 箱に入った中身

👉 「箱に入れる」イメージ


📦 アンボクシング

  • Integer → 箱から取り出す

👉 「中身だけ使う」イメージ


まとめ

種類 内容 自動?
オートボクシング int → Integer
アンボクシング Integer → int

🌟 最後に(大事)

オートボクシングは便利ですが、

  • nullで落ちる
  • 比較でバグる

など、「裏で何が起きているか」を理解しておくことで原因がわかり未然に防ぐことができると思いました。

🔹 オートボクシング = 箱に入れる
🔹 アンボクシング = 箱から出す

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?