Sobes.tech
Intern — Senior
80

Сравнение строк в Java с учётом интернирования и конкатенации

Условие задачи

Определите, какие из приведённых ниже сравнений строковых ссылок вернут true. При ответе учитывайте, как компилятор обрабатывает строковые литералы, механизм интернирования и особенности конкатенации строк в Java.

var a = "{ между скобок }";
final String b = "{ между ";
String c = "скобок }";
String d = "{ между скобок }";
String e = new String("{ между скобок }");

System.out.println(a == d);                    // №1
System.out.println(a == b + c);                // №2
System.out.println(a == b + "скобок }");      // №3
System.out.println(a == e);                    // №4

Для каждого сравнения объясните, почему полученный результат таков: является ли сравниваемый объект тем же самым объектом в пуле строк, создаётся ли новый объект в результате конкатенации, и как влияет оператор new на интернирование.