プリミティブ型と違い、ラッパークラス間に互換性はない。
キャストしてもダメ。
int a = 1000; byte b = 100; int c = b; byte d = (byte)a; // 要キャスト。aがdの範囲外のデータを保持していても、代入は成功する。例外もなし。 Integer e = 1000; Byte f = 100; Integer g = f; // 互換性がないのでコンパイルエラー Integer h = (Integer)f; // キャストもできないので、コンパイルエラー
ということで、ラッパークラスをプリミティブ型の代わりに使おうとすると問題に遭遇することがあるってお話。
EffectiveJavaでも非推奨だし、ラッパークラスはなんのためにあるんだろう。
言語仕様がややこしくなるだけな気がする。
暗黙の型変換を使わずに、厳密に値の範囲を設計してる場合には有効ってことなのかな。
あと、完全にオブジェクト重視で設計する場合に必要ってことか。
プリミティブ型かラッパークラスか、できればどっちかに統一して欲しいところ。