Где String сохраняет, когда создание объекта имеет конкатенацию? - PullRequest
0 голосов
/ 03 сентября 2018

Как мы знаем, следующая строка сохраняется в пуле строковых констант.

String a = "AB";

Объекты String, созданные как показано ниже, будут сохранены в куче.

String b = new String("AB");

String e = b.concat("C");

В это время Кто-нибудь может объяснить, где сохраняются следующие строки?

String c = new String("A"+ "B");

String d = "A" + "B";

Ценю, если вы можете четко объяснить причины.

1 Ответ

0 голосов
/ 03 сентября 2018

Прежде чем перейти к вашим целевым утверждениям, внесите одно небольшое исправление в ваш вопрос.

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";

Здесь есть два случая:

  1. Если второй оператор выполняется после первого, новая строка не создается в пуле строк, так как «A», «B» и «AB» уже присутствуют в пуле строк и могут быть повторно использованы с помощью Interning .
  2. Если второй оператор выполняется по отдельности, то первоначально две строки «A» и «B» создаются в пуле строк, а затем объединяются в «AB», который также хранится в пуле строк.

Надеюсь, это ответит на ваш вопрос. Ура!

...