2017-04-04 15 views
2

私はほとんどの場合、StringBuilder(int)を使用して、小さなデフォルト容量の愚かな再割り当てを回避します。どのようなjavac実装でも、StringBuilderを暗黙的に使用するために適切な容量を使用するために特別な処理を行いますか? "abcdefghijklmnopqrstuvwxyz" + numbers + "!.?:"は、文字通りの長さを考えると、少なくとも30の初期容量を使用しますか?暗黙のStringBuilderのサイズ

答えて

4

はい、それはスマートでスマートになるはずです。実際にはJava 9でこれが実現します(これは、私が大雑把に言って私が一部であったことです - 私はmade StringBuildersをプリサイズし、彼らが最終的により良い、より強力なアプローチに触発されました)。

http://openjdk.java.net/jeps/280には、「時にはStringBuilderを適切にプリセットする必要があることがある」と具体的に言及されています。

(そして、この話の教訓は、単におよび読み出し可能に可能な限りあなたのコードを記述し、コンパイラとJITが適切に仕事している最適化の世話をしましょう、です。)

0

これはあなたのコンパイラに依存してもよいですバージョン、これをテストするための設定など

、私は簡単な方法で作成しました:

public static void main(String[] args) { 
    System.out.println("abcdefghijklmnopqrstuvwxyz" + args[0] + "!.?:"); 
} 

をそしてコンパイルして、逆コンパイラを通してそれを実行した後、我々は次のような結果を得る:

を10
System.out.println((new StringBuilder()).append("abcdefghijklmnopqrstuvwxyz").append(args[0]).append("!.?:").toString()); 

少なくとも、いくつかのjavacのバージョンでは、デフォルトを使用しているようです。

バイトコードを手動で検査することは同じことを示します。

関連する問題