あえて言うほどではない 数値 ⇔ 文字列変換 Java編

こんにちは元Javaプログラマの村上です。

コーディングしている時に 文字列 ⇔ 数値 の変換ってよくやりますよね?
Javaでの王道は

数値 ⇒ 文字列

文字列 ⇒ 数値

Javaコーディング規約などでも推奨されています。

でもこんな方法でも変換はできます。

数値 ⇒ 文字列

文字列 ⇒ 数値

でもあまり推奨はされていません。
可読性であったり、効率が悪かったりという理由からです。

本当にそうなのか?
なので、効率が本当に悪いのか計測してみましょう。

サンプルとしてこんなコードでやってみます。

10回行った平均の時間を測ってみるとこんな感じでした。
単位はミリ秒です。

数値 ⇒ 文字列 Java5 Java6 Java7
String s = String.valueOf(i); 649 442 342
String s = "" + i; 995 736 363
String s = new Integer(i).toString(); 709 461 342
String s = Integer.toString(i); 623 419 342
文字列 ⇒ 数値 Java5 Java6 Java7
int i = Integer.parseInt(s); 678 459 241
int i = new Integer(s).intValue(); 753 492 240
int i = Integer.valueOf(s).intValue(); 768 513 275

Javaの進化はすごいというのとJava7ではほとんど差がないという事がわかりましたね(笑)
あと、予想外だったのは「String s = Integer.toString(i);」が一番速いんですね。
でもコードを書くときは効率の良さだけではなくて、可読性も重要なのでそこら辺も考えて規約は決める必要がありますね。

ちなみに変換する変数が定数だった場合

Java5で12ミリ秒でダントツです。
Java7だとミリ秒の精度では0になります。爆速です。

たぶんコンパイル時に最適化されてると思います。
他のコードは定数の時でも変わりませんでした。

Comments are closed, but you can leave a trackback: Trackback URL.