Javaでの文字列結合
業務でJavaを触っている中で何気なく、文字列結合って使ってるが、先日コードレビューを受けた時に、文字列結合をする時は +
ではなく、StringBuilder
を使ったほうが処理速度が早いとの指摘を受けた。
正直経験も浅く、言語の仕様までを把握していないのでいい機会だと思い調べてみました。
「+」 を使用した文字列結合
StrgingBuilder
のインスタンスを生成し append()
で文字列を結合した後に、String
のインスタンスを作成するらしい。メモリ上の領域が広がるわけではないらしいです。
つまりループ処理の中などで+演算子
を使って文字列を結合すると、メモリを無駄に消費してしまう。
そのためStringBuilder
を使用するほうが性能的には良いらしい。
ただし以下のようなケースの場合は、+演算子
を使うほうがよい。
・1行で複数の文字列リテラルを結合する場合
・1行で複数の文字列リテラルとString変数を結合する場合
public class Main {
public static void main(String[] args) {
public static final String COMMA = ","
String subject1 = "国語";
String subject2 = "数学";
String timeTable = subject1 + COMMA subject1 + COMMA subject2
}
}
StringBuilder を使用した文字列結合
先程も説明したようにループ処理等で文字列を結合する場合には適している。
public class Main {
public static void main(String[] args) {
String languageAry[] = {"Java", "Ruby", "PHP", "JavaScript"};
StringBuilder sb = new StringBuilder();
for(language : languageAry){
sb.append(language)
}
String sb = sb.toString();
System.out.println(fuga);
}
}
ちなみにappend()
は引数にString以外の型の変数を受け取ることが出来る。
今まで、それを知らずにint型
の値をその都度ToString()
でパースしていたので、コードも減るし、便利なので積極的に使って行こうと思います。
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("hoge");
sb.append(10); // 問題なく処理が通る
String fuga = sb.toString();
System.out.println(fuga);
}
}
実行結果
hoge10
参考
[Java]文字列連結で、+演算子 or StringBuilder どちらを使うべき?
StringBuilderクラスについて
Java(tm) Platform, Standard Edition 8