てきとうなメモ

本の感想とか技術メモとか

parseXXXとvalueOf

某書でJavaで文字列から数値に変換する時にXXX.valueOf(ex. Long.valueOf)よりもXXX.parseXXX(ex. Long.parseLong)を使ったほうが効率が良いよと書いてあったのだが、そもそも、前者はオブジェクト型、後者はprimitive typeを返すので目的がちょっと違うような。基本的にはprimitive typeをparseXXXを使って、コレクションに入れる場合はvalueOfかな。

で、両者の効率の違いなのだが、valueOfは内部的にparseXXXを呼んでいてさらにオブジェクト型にするためにnew XXXを呼んでいる。メソッド呼び出しとメモリ確保の処理でちょっと遅くなりそうだな。一応Byte〜Longぐらいまでは内部にオブジェクトのキャッシュを保持していて、そこにあればそれをそのまま用いるのでメモリ確保は行われない。FloatやDoubleはキャッシュないけど。