よかったら前回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/
最後まで読んでいただき、ありがとうございました!
コメント