2014-04-09

Java文字列連結は+でいいよね

ということなんだけど

StringBuilderを使ったクソコードはどこまで遅いか(きしだのはてな)
http://b.hatena.ne.jp/entry/d.hatena.ne.jp/nowokay/20140408%231396924547

↑これを見たら、単純に+は遅いって認識の人もけっこういるんじゃないかって不安になってきた。

以前 + が禁止の現場で作業をしたことがあって「+は最適化されますよ」と報告しておいたけど「いままでずっとこうだったから」というよく分からない理由でルールはそのまま。

ほかの人はStringBuilder()なんか使うの面倒だからか、文字列連結はconcat()を使っていて、+を使ったとき記述の簡潔さもStringBuilder()を使ったときパフォーマンスも失われて悪いとこどりのコード蔓延してた。

俺みたいに底辺現場で働いてる人間には「文字列連結に+を使うのはご法度」みたいな常識が広まると、面倒くさいことになってしまう。

余計なお世話を言えば、+とStringBuilder()の使い分けが理解できないレベルプログラマにはとりあえず「+を使っておけ」って言えばいいんじゃないのかな。

 +を使ったばかりに耐えられないくらいパフォーマンスが落ちる局面って少ないだろうし、そういうレベルプログラマが投入されるプロジェクトなんてそんなにパフォーマンスシビアじゃないだろうし。

  • 文字列の連結に「+」っていう演算子を使うことが概念的にスマートじゃねえんだよ。分かれ。

  • Javaで文字列連結は+を使えばStringBuilder()に最適化されるから、+を使っておけばよい いやいや、最適化されるのってリテラルの連結だけだろ?

    • Javaにヒアドキュメントが導入されれば解決する問題なんだけどな、文字列連結なんつーのは。 SQL文を組み立てるのに毎行毎行+"WHERE "+ "ID =" +id とか見てるとマジ発狂したくなる。 文字列...

    • いや変数でも最適化される。 使い分けが理解できないなら+を使っておけばいいよ。

      • StringBuilderよりも+のほうが性能出る場合があんの? 無いならStringBuilderで統一すべきだろ?

        • Javaを使う業務の目的でベンチマーク性能を求められることはほぼ無いからな? そもそも文字列結合ごときでシステム全般のパフォーマンスが致命的に上下しないからな?

        • 文字列連結があるたびに new StringBuilder() ~ append() とか、書くのも面倒だしコードも猛烈にゴチャるね

    • ごめんなさい。素直に横から質問なんですけど 何の意味があるの?  どちらにしろ趨勢に影響ない場合のほうが多数でしょ。 逆にそれが処理速度の過半を占めるようなレアなプログラ...

      • +による連結とStringBuilderによる連結で可読性はそんなに変わらないと俺は思ってる。 んで、可読性が変わらないなら、性能が出るほうに統一するべきだろ。

        • スクリプト系の言語には "本は{$count}冊あります" みたいに文字列中に変数を展開する機能があるじゃん。 これを "本は".appned($count).appned("冊あります") とか書いてたら、絶対「なんでこん...

          • String.Format()使えよ…(マジ切望)

          • 好みです、じゃねーよ。 性能が違うっつってんだろ。 改行すりゃ別に読みにくくない。 s = new StringBuilder().append("本は").append(count).appned("冊あります").toString(); ループ内だったらStringBuilder...

            • StringBuilder sb=new StringBuilder(); sb.append(String.Format("本は%d冊あります\n",booknum)) .append(String.Format("しかし、%s君は本を読むことが出来ません\n","増田")) .append(String.Format("何故なら%s君は%sを読むこ...

  • いいよ。どうせ99.99%の文字列連結はパフォーマンスに影響しないんだから、'+'で書いておいて、ボトルネックが生じたところだけプロファイラで計測して必要ならそこだけ書き換えれば...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん