String. Создание

String. Создание

Оператор new всегда создаёт новый объект. Поэтому ссылочные переменные, проинициализированные объектами String с помощью оператора new, всегда будут ссылаться на разные объекты, даже если эти объекты имеют одинаковое содержание.
При создании объекта String с помощью оператора "=", новый объект создаётся только один раз и записывается в строковый пул. При повторной попытке создать объект через "=" с таким же содержимым, новый объект не создастся, а вернётся уже существующий в строковом пуле.
Т.о. ссылочные переменные будут ссылаться на один и тот же объект, т.е. ссылки будут равны.


String morn = "Morning";   // Создался объект в строковом пуле
String morn2 = "Morning"; // Новый объект не создавался. morn2 ссылается
                         //на тот же объект, который уже есть в строковом пуле

String morn3 = new String("Morning");    // Создался новый объект с содержимым "Morning"
System.out.println(morn == morn2);      // true
System.out.println("Morning" == morn); //true. "Morning" не создавался, а был взят из строкового пула
System.out.println(morn == morn3);    //false
Если строка создаётся посредством строковых операций, то она уже не будет храниться в строковом пуле. Соответственно, операция "==" вернёт false.


String s = "bird";
s = s.concat("s");
System.out.println(s); // birds
System.out.println(s == "birds"); // false
Типы данных