Java: Сравнение строк
Для полноценной работы со строками в примерах данного раздела следует понимать особенность, которую полностью мы в этом курсе раскрывать не будем.
А именно, одно и то же значение-строка может существовать в программе в нескольких экземплярах. Если два раза посчитать значение "1"+"2"
, то получим, конечно, два одинаковых значения "12"
, но это будут именно два одинаковых значения, а не одно и то же (в памяти компьютера в двух разных местах будут находиться две одинаковые строки).
А важно это потому, что операции ==
и !=
, будучи примененными к строкам, проверяют именно сравнивается ли одно и то же значение. И для двух самостоятельных строк "12" результат применения ==
будет false
!
На самом деле, вероятно, не стоит погружаться в эту тему прямо сейчас, наши уроки построены таким образом, чтобы ясное понимание этого принципа вам еще долго не понадобилось, важно знать конкретное его следствие.
А именно, как в таком случае нужно сравнивать строки именно по значению?
Чтобы сравнить str1
и str2
, нужно написать str1.equals(str2)
- это выражение логического типа проверяет, что строка str1
и строка str2
имеют равные значения. Это может быть одно и то же значение или два отдельных равных значения.
В сухом остатке: строки следует сравнивать не с помощью ==
, а с помощью equals()
.
Неравенство строк, аналогично, следует проверять не с помощью !=
, а как отрицание равенства, используя логический оператор отрицания: !str1.equals(str2)
.
В предыдущих уроках упоминается, что извлечение символа из строки по его индексу возвращает значение типа «символ», а не «строка». Необходимо в связи с этим иметь в виду два факта:
1) сравнение символа и строки через equals()
всегда дает неравенство,
2) символы между собой можно сравнивать через ==
, в этом смысле символы ближе к числам, чем к строкам.
Задание
Напишите функцию isMister()
, которая принимает строку и проверяет, является ли она словом "Mister"
.