java文字列の連結(StringBuilder)

よかったら前回javaの文字列の足し算の記事も
書いてみたのでそちらもぜひご覧ください。
https://kazunaka.com/javamojiretsutashizanasobi/

今回もjavaの文字列の連結(足し算)なのですが、
文字列の連結は「+」記号でもできますが、避けてほしいというお話です。

なぜかというと、
文字列の足し算は無駄なインスタンスを生成してしまうからです。
String型の値は、実は変更ができない仕様なのです。

実際にコードを使って説明してみます。

String str1 = "Hello";
str1 += "World";
str1 += "!";

System.out.println(str1);

例えば上記のようなコードですが、インスタンスはstr1の一個だけに見えますが、実は3つのインスタンスを生成してしまってます。

“Hello” で1個目、”World”で2個目、”!”で3個目です。

同じstr1の変数の値を変更しているように見えますが、
javaの裏側ではString型を3つnewして作ってしまっている状態なのです。

ではどうしたらいいかというと、
StringBuilderというのを使いましょう。

こちらもコードに書いてみます。

StringBuilder sb1 = new StringBuilder();
sb1.append("Hello");
sb1.append("World");
sb1.append("!");

System.out.println(sb1.toString());

このように文字を連結して、
最後にtoString()でString型にしてあげて使用します。

これで無駄なインスタンスの生成が防げます。

もちろん結果は先ほどと同じです。

ちなみに処理速度もStringBuilderを使う方が速いです。

少し余談ですが、上記とは別の書き方も可能です。

StringBuilder sb2 = new StringBuilder();
sb2.append("Hello")
.append("World");
.append("!");

System.out.println(sb2.toString());

.appendで繋げていくことも可能です。お好みでお使いください。


似たようなものでStringBufferというのもありますが、
スレッドを複数使うときにこちらは使用します。
興味のある方はググってください。

今回お伝えしたいのは文字の連結がしたいというときは、
StringBuilderを使おう!とだけ、覚えておきましょう。

こっちの方がいいコートを書いていて、かっこいい気もします。


わかりやすく説明している方がいらっしゃったので、
そちらを紹介して終わります。
https://www.milk-island.net/document/java/kihon/i2/

最後まで読んでいただき、ありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次