【Java】Stringからintへの変換について

はじめに

Stringからintへの変換方法はいくつかある。よく使われるのは以下の手法だろうか。
●Integer.parseInt(String)を使う。
●Integer.valueOf(String)でIntegerオブジェクトを生成 ⇒ intValueメソッドを実行する。

どちらでも変換自体はできるが、前者が推奨される。理由は、FindBugsにかけたとき、後者だとPriority:Highで引っかかるためである。

サンプル

Integer.parseInt(String)を使う

int num = Integer.parseInt("123");

・文字列「123」がint型の「123」になって変数numに格納される。

Integer.valueOf(String)でIntegerオブジェクトを生成&intValue()でプリミティブ型を返す

int num = Integer.valueOf("123").intValue();

・まず、文字列「123」がIntegerオブジェクトに変換される。
・そしてIntegerクラスが提供するintValue()メソッドによってIntegerからintにアンボクシングされて変数numに格納される。

どちらでもStringからintに変換できるしコンパイルも通るが、後者はFindBugsにかけたときにPriority:Highで引っかかる。
バグの内容は、Boxing/unboxingに関するものである。
後者だと効率が悪いから、parseInt()メソッドで直接intに変換しろよ、ということだろうか。

FindBugsのBugInfoを見ると、「parseXXXメソッドを使いましょう」的なメッセージが表示される。

おわりに

結論としては、Stringからintに変換するときはparseInt()メソッドを使った方がよい、ということ。(intに限らず、Stringからdoubleやlongといったプリミティブ型に変換するときは、parseXXXメソッドを使った方がよい)
確かに、「String -> Integer -> int」と回りくどい方法よりも、「String -> int」に直接変換できる仕組みがあるのだから、それを利用した方が効率がよいとは思う。(プログラムのパフォーマンスに影響してくるのかな?)

参照

Integer (Java Platform SE 7)
文字列から数値への変換 - ラッパークラスを使った文字列と数値の変換 - Java入門
java - Findbugs issue with "Boxing/unboxing to parse a primitive" with Integer.valueOf(String) - Stack Overflow