Javaでの文字列演算(JDK 1.5前後比較)


ネイバーの面接で質問があったのですがそれが分からず本当に恥ずかしかったです同じ無知を繰り返さないために、整理しておきたいと思います.

1.JDK 1.5の計算前の文字列


  • JDK 1.5より前に、文字列を+、concat演算すると、新しいメモリに文字列が割り当てられて参照されます.

  • 次のコードがJDK 1.5より前に実行されるとします.
  • public static void main(String[] args) {
    	String a = "First";
        String b = "Second";
        String c  = "Third;
        System.out.println(a + b + c);
    }
    この場合、「ヒープ」(heap)領域のデータは次のようになります.

    (参照値もスタックに積み上げられ、GCが呼び出されるまでスタック領域のデータはメモリに保持されます)
  • のため、文字列演算はパフォーマンスの問題を引き起こすコードである.
  • なので、この場合StringBuilderまたはStringBufferを使用するのは常に良い方法です.

    JDK 1.5以降

  • JDK 1.5以降、コンパイルフェーズでStringオブジェクトがStringBuilderにコンパイルされ、append()で文字列演算(+)が実行されるように変更されます.
    //컴파일 전
    public static void main(String[] args) {
    	String a = "First";
        String b = "Second";
        String c  = "Third;
        System.out.println(a + b + c);
    }
    //컴파일 후, 디컴파일된 코드
    public static void main(String[] args) {
    	String a = "First";
        String b = "Second";
        String c  = "Third;
        System.out.println(new StringBuilder(a).append(b).append(c));
    }
    しかし、すべての文字列演算がStringBuilderに取って代わられるわけではありません.次の場合、各演算は新しいStringBuilderを宣言します.
  • セミコロン(;)演算を次のように分割します.
  • 複数行宣言
  • の複文を使用する場合は
  • である.
  • concat()を使用する場合は
  • 3.整理

  • 行を使用して文字列演算を行う場合は、+を使用します.
    複数行
  • を使用する場合は、StringBuilder(またはStringBuffer)を使用します.