Чтобы проверить две символьные строки на равенство, достаточно вызвать метод equals (). Так, выражение s.equals (t) возвращает логическое значение true, если символьные строки в и t равны, а иначе — логическое значение false. Следует иметь в виду, что в качестве а и t могут быть использованы строковые переменные или константы. Например, следующее выражение вполне допустимо:
"Hello!".equals(greeting);
А для того чтобы проверить идентичность строк, игнорируя отличия в прописных и строчных буквах, следует вызвать метод equalsIgnoreCase (), как показано ниже.
"Hello".equalsIgnoreCase("hello");
Для проверки символьных строк на равенство нельзя применять операцию ==. Она лишь определяет, хранятся ли обе строки в одной и той же области памяти. Разумеется, если обе строки хранятся в одном и том же месте, они должны совпадать. Но вполне возможна ситуация, когда одинаковые символьные строки хранятся в разных местах. Ниже приведен соответствующий пример.
String greeting = "Hello"; // инициализировать переменную greeting строкой if (greeting - "Hello") ...
// возможно, это условие истинно if (greeting.substring(0, 3) == "Hel") ...
// возможно, это условие ложно
Если виртуальная машина всегда обеспечивает совместное использование одинаковых символьных строк, то для проверки их равенства можно применять операцию =. Но совместно использовать можно лишь константы, а не символьные строки, получающиеся в результате таких операций, как сцепление или извлечение подстроки методом substring(). Следовательно, лучше вообще отказаться от проверки символьных строк на равенство с помощью операции =, чтобы исключить в программе наихудшую из возможных ошибок, проявляющуюся лишь время от времени и практически не предсказуемую.
НА ЗАМЕТКУ С++! Если вы привыкли пользоваться классом string в С++, будьте особенно внимательны при проверке символьных строк на равенство. В классе string операция == перегружается и позволяет проверять идентичность содержимого символьных строк. Возможно, создатели Java напрасно отказались от обработки символьных строк подобно числовым значениям, но в то же время это позволило сделать символьные строки похожими на указатели. Создатели Java могли бы, конечно, переопределить операцию = для символьных строк таким же образом, как они это сделали с операцией +. Что ж, у каждого языка программирования свои недостатки.
Программирующие на С вообще не пользуются операцией = для проверки строк на равенство, а вместо этого они вызывают функцию strcmp (). Метод compareTo () является в Java точным аналогом функции strcmp(). Конечно, можно воспользоваться выражением следующего вида:
if (greeting.compareTo("Help") ==0) ...
Если вы зарегистрировали фирму и придумали свой фирменный знак, теперь настало время сделать печать. Печать является важным инструментом при ведении бизнеса и чем сложнее ее подделать тем лучше. Печать должна быть уникальна как подпись. Помочь вам сделать оригинальную печать могут на http://фото-бум.рф/, а так же вам могут сделать и штамп.
Но, на наш взгляд, применение метода equals () делает программу более удобочитаемой.
Пустые и нулевые строки
Пустой считается символьная строка нулевой длины. Для того чтобы проверить, является ли символьная строка пустой, достаточно составить выражение вида if (str. length () == 0)
или if (str.equals ("")).
В Java пустая строка является объектом, в котором хранится нулевая (т.е. 0) длина символьной строки и пустое содержимое. Но в переменной типа String может также храниться специальное пустое значение null, указывающее на то, что в настоящий момент ни один из объектов не связан с данной переменной. (Подробнее пустое значение null обсуждается в главе 4.) Для того чтобы проверить, является ли символьная строка нулевой, т.е. содержит значение null, служит условие if (str = = null).
Иногда требуется проверить, не является ли символьная строка ни пустой, ни нулевой. Для этой цели служит условие if (str != null && str. length () != 0)
. Ho сначала нужно проверить, не является ли символьная строка str нулевой. Как будет показано в главе 4, вызов метода с пустым значением null считается ошибкой. |