как же печатается верно:Неизменные строки в Java
String sOne = new String();
sOne = "one";
String sTwo = new String();
sTwo = "one";
System.out.println(sOne == sTwo ? "true": "false");
но это печатает ложь:
String sOne = new String("one");
String sTwo = new String("one");
System.out.println(sOne == sTwo ? "true": "false");
не должны они оба печатать ложь ... Я понимаю, что строки являются неизменными и все, но я не понимаю, почему НЕ инициализация с помощью конструктора вызывает разные выходные данные
Это не только простые литералы, которые интернированы - это любая константа строка, которая означает, что строковый литерал _or_ конкатенации (с помощью '+') из двух (или более) строковые литералы. См. [JLS 15.28] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28) и [JSL 3.10.5] (http: // docs. oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.5). – yshavit