2014-12-14 4 views
1

У меня есть следующий snippet.I кода я получает выход в false для опорного равенства строк s1 и s2.Ссылка равенство Строковых литералов

Не должно быть true? Строки неизменны в Java, и когда я создаю s2 с тем же содержимым, что и s1 (я ненавижу Winters), ссылка s2 просто укажет на уже существующий объект String, на который указывает s1.

public static void main(String[] args) { 

    String s1="I hate"; 
    s1=s1+" Winters"; 

    String s2="I hate Winters"; 

    System.out.println(s1==s2); 
} 

ответ

3

В вашей программе, расчеты сделаны во время выполнения, компилятор не знает, что s1 и s2 будут равные строки, так что он не будет частью постоянного пула. Если вы делаете:

String s1 = "I hate Winters"; 
String s2 = "I hate" + " Winters"; 

конкатенация будет происходить при компиляции время, и они указывают на то же самое буквальное в бассейне.