Что заставляет сравнение ссылок (==) работать для некоторых строк в Java?

У меня есть следующие строки кода для сравнения String. str1 не равно str2, что понятно, поскольку сравнивается ссылка на объект. Но тогда почему s1 равно s2?

String s1 = "abc";
String s2 = "abc";

String str1 = new String("abc");
String str2 = new String("abc");

if (s1==s2)
    System.out.println("s1==s2");           
else
    System.out.println("s1!=s2");

if (str1==str2)
    System.out.println("str1==str2");           
else
    System.out.println("str1!=str2");

if (s1==str1)
    System.out.println("str1==s1");         
else
    System.out.println("str1!=s1");

Вывод:

  s1==s2
  str1!=str2
  str1!=s1 
60
задан Michael Berry 12 June 2012 в 13:22
поделиться