String a = "Hello";
String b = "Hello";
String letter = "o";
String c = "Hell";
String concatenated = c + letter;
System.out.println(a == b); //true
System.out.println(a == concatenated); //false
Заведомо известно, что стринг неизменяемый и ссылочный, а так же что a и b равны в связи с тем, что при создании объекта "Hello" он попадает в пул стринговых объектов внутри виртуальной машины (возможно это есть куча, не могу точно утверждать), поэтому при присваивании и а и b происходит присваивание ссылки (возможно чуть коряво объясняю, прошу простить). Вопрос далее когда происходит конкатенация 2х строк через оператор +. Я предполагаю что происходит в данном случае (в связи с тем что String неизменяемый) анонимный вызов new без проверки в существующем пуле. Почему так?
На вскидку - потому что a = new String("Hello"); a == b; //false Создание нового объекта - это создание нового объекта, и ссылки как следствие
так я это и предполагаю, что в случае сложения происходит анонимный вызов конструктора, но почему джава пул хранимых объектов не смотрит?
Куча и стринг пул это не одно и то же.
стринг пул лежит в куче
Обсуждают сегодня