Интернирование строк (string intern)
String s1 = "Hello, World!";
String s2 = new String("Hello, World!").intern();
String s3 = "Hello, World!";
String s4 = new String("Hello, World!");
System.out.println(s1 == s2);
// true, так как s2 ссылается на интернированный экземпляр строки
System.out.println(s1 == s3);
// true, так как s3 ссылается на интернированный экземпляр строки
System.out.println(s1 == s4);
// false, так как s4 ссылается на новую строку, созданную в памяти
Интернирование строк (string intern) - это процесс хранения одной и той же строки только в одном экземпляре в пуле строк (string pool) для оптимизации использования памяти и ускорения сравнения строк.
Вместо того чтобы создавать новый объект строки каждый раз, когда вы используете литерал строки (например, "Hello, World!"), Java проверяет, существует ли уже такая строка в пуле строк. Если она там есть, Java использует существующий экземпляр строки, иначе создает новый и добавляет его в пул строк.
Интернирование строк выполняется с использованием метода intern(), доступного для объектов класса String. Вызов этого метода на строке приводит к тому, что Java проверяет пул строк на наличие строки с таким же содержанием. Если строка уже существует в пуле строк, метод возвращает ссылку на существующий экземпляр. В противном случае он добавляет текущую строку в пул и возвращает ссылку на нее.
Интернирование строк имеет смысл использовать, если у вас есть множество одинаковых строк, и вы хотите оптимизировать использование памяти или ускорить сравнение строк. Однако не стоит интернировать каждую строку, так как это может привести к излишней нагрузке на пул строк и неэффективному использованию памяти.