String.format() メソッドが遅い件について

Java 1.5 から、C の sprintf みたいな構文が使えるわけですよ。

今まで速度が必要な箇所で使ったことがなかったけど、たまたま fps を測りたくて、こんな感じのコードを書いてみたら・・・

long now = System.currentTimeMillis();
String text = String.format("%3.1ffps", 1000f / (time - now));
canvas.drawText(text, 0, getHeight(), null);
time = now;

なんと、String.format にものすごく時間がかかることがわかった。

long now = System.currentTimeMillis();
canvas.drawText("" + 1000f / (time - now) + "fps" 0, getHeight(), null);
time = now;

String.format() を使う上のパターンだと、5〜6fps、使わない下のパターンだと 20〜30fps となる。

いやいや、これほどまでとは。びっくりびっくり。