LoginSignup
0
0

More than 3 years have passed since last update.

Javaでの文字列結合について

Last updated at Posted at 2020-11-28

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

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0