Autoboxingは、プリミティブ型(int、doubleなど)を対応するラッパークラスのオブジェクト(Integer、Doubleなど)に自動的に変換することです。Unboxingは、ラッパークラスのオブジェクトを再びプリミティブ型に変換する逆のプロセスです。
これは、代入時、メソッドの引数、コレクションで自動的に機能します:
List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Autoboxingの例:5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing:Integer(5) -> 5
リスク:
==(参照による比較)とequalsでの複雑さ。次のコードは例外をスローする可能性がありますか?なぜですか?
Integer x = null; int y = x;
回答: コードはNullPointerExceptionをスローします。なぜなら、int y = x;を実行しようとすると、nullからプリミティブへのunboxingが発生し、nullをintに変換することはできないからです。
物語
intの使用を防ぎ、実サーバー上での重要な遅延を引き起こしました。物語
Integerを使用しましたが、-128から127までの値はキャッシュされることを考慮せず、その他の値はキャッシュされませんでした。そのため、==が突然誤った結果を返し、キャッシュからデータが不正に削除される原因となりました。物語
REST APIにnullableな値が届きました。受信したIntegerの単純なunboxingは、クライアントからの数値の代わりに予期しないnullが来たため、クラッシュを引き起こすことがありました。