他の回答は、文字列プールに 1 つの文字列のみが追加される理由をよく説明しています。ただし、自分でいくつかのテストを確認して作成したい場合は、バイトコードを調べて、作成され、文字列プールに追加された文字列の数を確認できます。元:
例1:
public static void main(String[] args) {
String hi = "Tom" + "Brady" + "Goat";
}
バイトコード:
// access flags 0x9
public static main(String[]) : void
L0
LINENUMBER 6 L0
LDC "TomBradyGoat"
ASTORE 1
L1
LINENUMBER 7 L1
RETURN
L2
LOCALVARIABLE args String[] L0 L2 0
LOCALVARIABLE hi String L1 L2 1
MAXSTACK = 1
MAXLOCALS = 2
ご覧のとおり、文字列は 1 つだけ作成されます
例2:
public static void main(String[] args) {
String str1 = "Tom";
String str2 = "Brady";
String str3 = "Goat";
String str = str1 + str2 + str3;
}
バイトコード:
// access flags 0x9
public static main(String[]) : void
L0
LINENUMBER 6 L0
LDC "Tom"
ASTORE 1
L1
LINENUMBER 7 L1
LDC "Brady"
ASTORE 2
L2
LINENUMBER 8 L2
LDC "Goat"
ASTORE 3
L3
LINENUMBER 9 L3
NEW StringBuilder
DUP
ALOAD 1: str1
INVOKESTATIC String.valueOf (Object) : String
INVOKESPECIAL StringBuilder.<init> (String) : void
ALOAD 2: str2
INVOKEVIRTUAL StringBuilder.append (String) : StringBuilder
ALOAD 3: str3
INVOKEVIRTUAL StringBuilder.append (String) : StringBuilder
INVOKEVIRTUAL StringBuilder.toString () : String
ASTORE 4
L4
LINENUMBER 10 L4
RETURN
L5
LOCALVARIABLE args String[] L0 L5 0
LOCALVARIABLE str1 String L1 L5 1
LOCALVARIABLE str2 String L2 L5 2
LOCALVARIABLE str3 String L3 L5 3
LOCALVARIABLE str String L4 L5 4
MAXSTACK = 3
MAXLOCALS = 5
ご覧のとおり、4 つのストリングが作成されます