2015-08-18 4 views
3

Я проверил оператор == непосредственно в System.out.println для сравнения ссылок на строки. Мое сомнение заключается в том, что «String Constant Pool» обе строки будут ссылаться на один и тот же экземпляр в пуле и на выход «true», то почему первый вывод «false».Проверка равенства для строк в System.out.println

Ниже приведен пример кода:

String s1 = "abc";   
String s2 = "abc"; 
System.out.println("s1==s2 is:"+ s1==s2); 
System.out.println("s1==s2 with brackets is:"+ (s1==s2)); 

Выход:

false 
s1==s2 with brackets is:true 

ответ

8

System.out.println("s1==s2 is:"+ s1==s2); сравнивает "s1==s2 is:"+ s1 к s2, и, следовательно, возвращает ложь. (s1==s2) истинно, так как оба получают экземпляр, на который они ссылаются, из пула строк.

0

System.out.println ("s1 == s2 is:" + s1 == s2); -> он объединяет «s1 == s2 is:» + s1 и проверяет равенство из-за того, что вы получаете false.

0

сравнить "s1==s2 is:" + "abc" с abc в первом случае ->false

1

Если вы видите Java docs+ получают более высокое старшинство тогда == так первой строка "s1==s2 is:"+ s1 будет слита, то это будет по сравнению с s2, который false для первого случая, потому что первая строка, образованная конкатенацией, будет создаваться в куче.