Sobes.tech
Junior

Каква е разликата между създаването на низ с помощта на new String() и използването на литерал на низ?

sobes.tech AI

Отговор от AI

Когато използвате буквален низ ("abc"), низът се създава в пул от низове (String Pool). Ако вече съществува низ със същата стойност в пула, се връща препратка към съществуващия обект. Това е оптимизация за спестяване на памет.

При използване на new String("abc"), винаги се създава нов обект низ в купчината (heap), дори ако вече има низ със същата стойност в пула.

Пример:

// Създава се буквален низ "hello". Ако го няма в пула, се добавя.
// str1 препраща към обекта в пула.
String str1 = "hello";

// Отново се използва буквалният низ "hello". Тъй като вече е в пула,
// str2 също препраща към същия обект в пула като str1.
String str2 = "hello";

// Създава се нов обект низ със стойност "hello" в купчината.
// str3 препраща към този нов обект в купчината, а не към обекта в пула.
String str3 = new String("hello");

// Проверка на препратките:
// str1 и str2 препращат към един и същи обект в пула.
System.out.println(str1 == str2); // true

// str1 препраща към обекта в пула, str3 към новия обект в купчината.
System.out.println(str1 == str3); // false

// Проверка на стойността:
// Всички низове имат една и съща стойност.
System.out.println(str1.equals(str3)); // true

Разлики в таблицата:

Критерий Буквален низ ("abc") new String("abc")
Място на създаване String Pool Купчина (Heap)
Създаване на обект Връща съществуващ или създава нов Винаги създава нов обект
Оптимизация на паметта Ефективно използва пула за повторения Може да създаде дубли, по-малко ефективен
Сравнение на препратки (==) Често true за низове със същата стойност Винаги false за отделно създадени низове със същата стойност