Я только начал изучать Java и наткнулся на это:Строковые литералы в Java
String s = "Hello";
String s1 = "Hello";
if(s.equals("Hello") && s.equals(s1))
{
System.out.println("Equal");
}
Первое условие в if
заявлении сравнивает строку буквального s
против последовательности символов, где в качестве второго заявление сравнивающих s
против другой строковый литерал s1
. Оба сравнения оказываются истинными.
Я понимаю, что s
будет ссылаться на "Hello"
и s1
. Поскольку оба номера s
и s1
содержат ссылки на "Hello"
, их можно сравнить и всегда равны (из-за «общего пула строк»).
Вопрос: Как может s
, который содержит ссылку, сравниваться с фактической строкой "Hello"
, которая является символьной последовательностью? Есть ли какая-либо логика или это просто реализация, которая заботится о ссылках на память, а затем сравнивает эти два?
Пожалуйста, поправьте меня, если я понимаю неправильно ...
s == «Привет» не совпадает с s.equals («Hello»). равно проверяет, равны ли строки и не совпадают ли ссылки. – schlingel
помните, что '' '' '' '' '' '' '' не больше, чем угодно. Пул пула не является гарантией! – ljgw
@ljgw - что вы имеете в виду под «как правило, равным. Пул строк не является гарантией!». – TheLostMind