Прежде чем перейти к вашим целевым утверждениям, внесите одно небольшое исправление в ваш вопрос.
String b = new String("AB");
String e = b.concat("C");
Вышеуказанные операторы создадут объект String в Heap, а также в String Pool для дальнейших ссылок.
Теперь ваш первый вопрос:
String c = new String("A"+ "B");
Здесь первые две строки «A» и «B» создаются в пуле строк и объединяются в «AB», который также хранится в пуле строк. ---> Point-I
Затем вызывается конструктор new String(dataString)
с параметром "AB" . Это создаст одну строку в куче и одну в пуле строк, каждая из которых будет иметь значение «AB». ---> Point-II
Строка "AB", созданная в пуле строк в точках I и II: equal
, но not the same
.
Теперь ваш второй вопрос:
String d = "A" + "B";
Здесь есть два случая:
- Если второй оператор выполняется после первого, новая строка не создается в пуле строк, так как «A», «B» и «AB» уже присутствуют в пуле строк и могут быть повторно использованы с помощью Interning .
- Если второй оператор выполняется по отдельности, то первоначально две строки «A» и «B» создаются в пуле строк, а затем объединяются в «AB», который также хранится в пуле строк.
Надеюсь, это ответит на ваш вопрос. Ура!