Приветствую! Вопрос, который не дает мне покоя. Как работает память при создании строк разными способами. В разных источниках по-разному. Верны ли следующие комментарии в коде?
String st1 = new String("Молоко");  /* тут создалось сразу два объекта и в хип памяти,
и в пуле строк. Но переменная st1 ссылается на объект в хипе */
String st2 = new String("Молоко"); /* тут создался только один
объект в хипе и переменная st2 на него ссылается. */
String st4 = st1.intern(); /*переменная ссылается на объект, созданный в пуле при создании
 st1 и  найденный в пуле строк */
String st3 = "Молоко"; /* тут не создалось объекта в пуле, он ссылается
на тот объект, который был ранее создан st1 в пуле */
Меня, собственно говоря, волнует всего один вопрос, когда мы создаем строковый объект, используя оператор new, проверяется ли в этот момент String pool на наличие такого объекта и в случае отсутствия такого объекта в стринг пуле, создается ли он? Еще один пример:
String str4 = new String("Всем привет");
Если ранее эта строка в программе не использовалась, создается ли она и в хип памяти и в стринг пуле? И как достоверно это узнать