いいえ、そうではありません。
まず、セマンティクスにわずかな違いがあります。の場合、 をスローしますがa、の元の値を であるかのように扱います。さらに、メソッドは値のみを受け入れますが、オペレーターは暗黙のうちに引数を文字列に変換します (オブジェクトのメソッドを使用)。そのため、メソッドは受け入れるものにおいてより厳密です。nulla.concat(b)NullPointerExceptiona+=banullconcat()String+toString()concat()
内部を調べるには、単純なクラスを次のように記述します。a += b;
public class Concat {
    String cat(String a, String b) {
        a += b;
        return a;
    }
}
javap -c(Sun JDKに含まれています)で逆アセンブルします。次のリストが表示されます。
java.lang.String cat(java.lang.String, java.lang.String);
  Code:
   0:   new     #2; //class java/lang/StringBuilder
   3:   dup
   4:   invokespecial   #3; //Method java/lang/StringBuilder."<init>":()V
   7:   aload_1
   8:   invokevirtual   #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   11:  aload_2
   12:  invokevirtual   #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   15:  invokevirtual   #5; //Method java/lang/StringBuilder.toString:()Ljava/lang/    String;
   18:  astore_1
   19:  aload_1
   20:  areturn
だから、a += b同等です
a = new StringBuilder()
    .append(a)
    .append(b)
    .toString();
concatメソッドはより高速である必要があります。ただし、StringBuilder少なくともパフォーマンスの点では、より多くの文字列を使用すると、メソッドが優先されます。
Stringand (およびそのパッケージ プライベート基本クラス)のソース コードはStringBuilder、Sun JDK の src.zip で入手できます。char 配列を構築し (必要に応じてサイズを変更)、最終的なString. 実際のメモリ割り当ては驚くほど高速です。
更新: Pawel Adamski が指摘しているように、最近の HotSpot ではパフォーマンスが変化しています。javacまったく同じコードを生成しますが、バイトコード コンパイラはごまかします。コードの本体全体が破棄されるため、単純なテストは完全に失敗します。Summing System.identityHashCode(not String.hashCode) は、StringBufferコードにわずかな利点があることを示しています。次の更新がリリースされるとき、または別の JVM を使用する場合は、変更される可能性があります。@lukasederから、HotSpot JVM 組み込み関数のリスト。