私はほとんどの場合、StringBuilder(int)を使用して、小さなデフォルト容量の愚かな再割り当てを回避します。どのようなjavac実装でも、StringBuilderを暗黙的に使用するために適切な容量を使用するために特別な処理を行いますか? "abcdefghijklmnopqrstuvwxyz" + numbers + "!.?:"
は、文字通りの長さを考えると、少なくとも30の初期容量を使用しますか?暗黙のStringBuilderのサイズ
2
A
答えて
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] + "!.?:");
}
をそしてコンパイルして、逆コンパイラを通してそれを実行した後、我々は次のような結果を得る:
を10System.out.println((new StringBuilder()).append("abcdefghijklmnopqrstuvwxyz").append(args[0]).append("!.?:").toString());
少なくとも、いくつかのjavacのバージョンでは、デフォルトを使用しているようです。
バイトコードを手動で検査することは同じことを示します。
関連する問題
- 1. スカラ:暗黙的に暗黙のクラスに
- 2. 暗黙のブロードキャスト
- 3. 暗黙のパラメータ
- 4. 暗黙のクラス対形質への暗黙の変換
- 5. Android暗黙のインテント
- 6. 暗黙の置換
- 7. 暗黙の変換
- 8. Laravel暗黙のモデルバインディングオミットパラメータ
- 9. 暗黙の変換
- 10. 暗黙のMakefileは
- 11. Webpack暗黙のベンダーチャンク
- 12. 暗黙ConfigurationElementCollectionのセクション
- 13. OpenMP暗黙のバリア
- 14. DateTimeから暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙変換に変換することができません
- 15. IdentityServer3の暗黙的なフローではなく、暗黙的なjavascript
- 16. 暗黙的に変換するときに暗黙のany2stringaddシンボル
- 17. 暗黙的な変換と暗黙のクラス
- 18. 猫:暗黙
- 19. インポート暗黙
- 20. 暗いテキスト(暗黙でない)のプレースホルダー
- 21. matlabの暗黙のインターフェイス
- 22. メソッドハンドラの暗黙のキャスト?
- 23. コンテナ内の暗黙のスタイル
- 24. Pythonの暗黙の行列
- 25. 暗黙のテンプレートメソッドのインスタンス
- 26. Lispでの暗黙のプログラミング
- 27. Scalaの暗黙のコンパイルエラー
- 28. Scalaの暗黙のクラス・パラメータ
- 29. UNIXコマンドの暗黙のシステムコール
- 30. C++コンストラクタの暗黙のメンバー