Создадутся ли два объекта при создании строк одинаковых по значению

«Создадутся ли два объекта при создании строк одинаковых по значению» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java строки хранятся в пуле строк (String Pool). При создании строки через литерал (String s = "text") JVM сначала проверяет пул на наличие такой строки. Если строка есть, возвращается ссылка на существующий объект, иначе создаётся новый.

При использовании конструктора (new String("text")) всегда создаётся новый объект в куче, даже если такая строка уже есть в пуле.

Пример:

String s1 = "hello";        // Пул строк  
String s2 = "hello";        // Та же ссылка, что и s1  
String s3 = new String("hello");  // Новый объект в куче  

System.out.println(s1 == s2);  // true (один объект)  
System.out.println(s1 == s3);  // false (разные объекты)  

Для сравнения содержимого используйте equals().