2016-05-09 3 views
1

Другими словами, если у меня есть две переменные типа string, s и t, такие, что s == t, то s.equals (t) гарантированно возвращает true?Имеет ли ссылочное равенство в java структурное равенство для строк?

Я думал, что ответ на это был, очевидно, да, но на экзамене, проведенном моим профессором для вступительного финального класса программирования, он говорит, что это не так. Мысли?

** NEVERMIND: Я понял, что они могут быть нулевыми и поэтому будут ссылочно равными, но вы не сможете называть их равными.

+2

если они «пустые»? – Maljam

+2

Учитывайте, что обе переменные имеют значение «null». Я не знаю, это то, что имел в виду профессор, но если нет, он ошибается. [Прямо от источника.] (Http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/lang/String.java?av=f#964) –

+0

спасибо! @Maljam –

ответ

0

== означает, что указатели на два объекта одинаковы. Это означает, что объекты содержатся в одной и той же ячейке памяти. Если это правда, они являются одним и тем же объектом и должны иметь одинаковое значение, поэтому .equals() будет истинным.

Обратите внимание, что обратное неверно - .equals(), являющийся истинным, не гарантирует, что == будет правдой.

Исключения были бы только в том случае, если вы переопределили метод .equals(), чтобы всегда возвращать false или оба объекта были null.

0

Нет, это не означает то же самое.

s1==s2 будет возвращать, ссылаются ли ссылки на s1 и s2 на String pool одинаковые или нет, а не их содержимое.

Пока s1.equals(s2) будет проверять содержимое строки s1 и s2.

Смежные вопросы