[Java]String Concatnate
文字列結合の話。
String
を結合するときには、この順に適用可能か考えていく。
- 演算子
+
を使う String#concat()
StringBuffer
システム開発をやっていると文字列の取り扱いはいたる所で出てくる。当然結合処理も。数字だろうが日付だろうがString
なシステム(こういうところはDBのカラムも片っ端からCHAR
やVARCHAR2
になっている)もあるけど、それはちょっと別の話。
String
の結合で
という言葉をたまに聞くが、文面どおりにとってはいけない。完全に間違っているわけではないけど、略しすぎている。本当の内容は+
を使った結合は遅い複数ステートメントにまたがる結合を行うなら、
だ。+
を使った結合は遅くなる
StringBuffer
やString
クラスのAPI Documentに従うと、+
結合はStringBuffer(Java5.0以降なら、場合によってStringBuilder
)を使った結合に変換される。
コード
str = stringA + stringB;
変換後
str = new StringBuffer().append(stringA).append(stringB).toString();
当然、コンパイル後には2つに違いはない。これが複数ステートメントに分かれているとどうなるかというと、
コード
str = stringA + stringB;
str = str + stringC;
str = new StringBuffer().append(stringA).append(stringB).toString();
str = new StringBuffer().append(str).append(stringC).toString();
となり、StringBufferの生成とStringへの変換が2回に分かれてしまう。こうなると、最初からStringBufferを生成しておいてappendしていく方が効率がいい。
for (int i = 0; i < strs.length; i++) {
str = str + strs[i];
)
なんかになるとnew StringBuffer
とtoString
を配列の長さ分だけ実行することになってぼろぼろになる。これを
といっているわけだ。+
を使った結合は遅い
0 件のコメント:
コメントを投稿
登録 コメントの投稿 [Atom]
<< ホーム