Это потому что тебе повезло. Оператор == в Java проверяет равенство ссылок: он возвращает true, если указатели совпадают. Он не проверяет равенство содержимого. Идентичные строки, обнаруженные во время компиляции, сворачиваются в один экземпляр String, поэтому он работает с литералами String, но не со строками, сгенерированными во время выполнения.
Например, "Foo" == "Foo" может работать, а "Foo" == new String("Foo") — нет, потому что new String("Foo") создает новый экземпляр String и нарушает любое возможное равенство указателей.
Что еще более важно, большинство Strings, с которыми вы имеете дело в реальной программе, создаются во время выполнения. Пользовательский ввод в текстовые поля генерируется во время выполнения. Сообщения, полученные через сокет, генерируются во время выполнения. Материал, прочитанный из файла, генерируется во время выполнения. Поэтому очень важно использовать метод equals, а не оператор ==, если вы хотите проверить равенство содержимого.
person
zneak
schedule
11.09.2010