Java ボクシング について
EffectiveJavaを読んでいて、ボクシングという単語が出てきてた時に、一瞬井上尚弥が頭を過ぎった自らを戒めるべくJavaのボクシングについて改めて整理する
プリミティブ型と参照型について
Javaにはプリミティブ型と参照型が存在する
プリミティブ型はそれ自身が値であり何のメソッドも持たない
プリミティブ型と参照型の小話
少し本題と話が逸れるが、プリミティブ型と参照型についてなるほどと思った事をまとめておく
初期値の違いについて
- 参照型:nullが使用可能
- プリミティブ型:例えば整数の場合初期値が0
初期値を明示的にnullにしておきたい場合、参照型が適している
ValueOfについて
新たな値を生成する際には、new Integer(10)
よりInteger.ValueOf(10)
の方が新たなオブジェクトが生成されずメモリ的に効率が良い
ちなみにIntegerの場合、-128~127の範囲の値には事前に生成されたオブジェクトが利用され、その範囲外の場合異なるオブジェクトになる
プリミティブ型のラッパークラス
とはいえ値の操作が出来ないと不便である。
そこで、プリミティブ型の値を操作するメソッドを持ったラッパークラスが存在する。
当初は明示的に変換が必要だったが、Java5.0からプリミティブ型と参照型の自動変換が可能となった。 この自動変換をそれぞれ
- プリミティブ→ラッパーへの自動変換はオートボクシング
- ラッパー→プリミティブへの自動変換はアンボクシング
と呼ぶ
参考
Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで 谷本 心 https://www.amazon.co.jp/dp/477418909X/ref=cm_sw_r_tw_dp_41KT0MVGQ0MYMYBMYFXV?_encoding=UTF8&psc=1 @amazonJPより