こんにちは元Javaプログラマの村上です。
コーディングしている時に 文字列 ⇔ 数値 の変換ってよくやりますよね?
Javaでの王道は
数値 ⇒ 文字列
1 |
String s = String.valueOf(i); |
文字列 ⇒ 数値
1 |
int i = Integer.parseInt(s); |
Javaコーディング規約などでも推奨されています。
でもこんな方法でも変換はできます。
数値 ⇒ 文字列
1 2 3 |
String s = "" + i; String s = new Integer(i).toString(); String s = Integer.toString(i); |
文字列 ⇒ 数値
1 2 |
int i = new Integer(s).intValue(); int i = Integer.valueOf(s).intValue(); |
でもあまり推奨はされていません。
可読性であったり、効率が悪かったりという理由からです。
本当にそうなのか?
なので、効率が本当に悪いのか計測してみましょう。
サンプルとしてこんなコードでやってみます。
1 2 3 |
for (int i = 0; i < 10000000; i++) { String s = String.valueOf(i); // ここを順番に変えて見ます。 } |
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);」が一番速いんですね。
でもコードを書くときは効率の良さだけではなくて、可読性も重要なのでそこら辺も考えて規約は決める必要がありますね。
ちなみに変換する変数が定数だった場合
1 2 3 |
for (int i = 0; i < 10000000; i++) { String s = "" + 1000; } |
Java5で12ミリ秒でダントツです。
Java7だとミリ秒の精度では0になります。爆速です。
たぶんコンパイル時に最適化されてると思います。
他のコードは定数の時でも変わりませんでした。