gotoshin

主に学んだ事の自分メモ用です。記事に書くまでも無いような事はhttps://scrapbox.io/study-diary/に書いてます。

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より