equals в Java
Сравнивайте текст String через equals, чтобы совпадающие слова печатали true. В Yard.java напишите String a = "red"; и String b = "red";, затем напечатайте a.equals(b). Добавьте String c = "blue"; и напечатайте a.equals(c). Скомпилируйте через javac Yard.java и запустите java Yard. На экране должны быть true, затем false. Вторая демо создаёт два объекта new String("red"), чтобы == мог напечатать false, а equals всё ещё печатал true. Debugging оставьте для следующей страницы — этот урок про совпадение содержимого против идентичности объекта.
Сопоставьте текст через equals
Страница polymorphism запускала разные тела horn через переменные типа Machine. Эта страница сравнивает текст. Откройте Yard.java. Держите имя public-класса Yard. Удалите оставшиеся демо Machine / Truck / Car, если они хоронят историю строк, оставшиеся abstract fills, демо путей и любой клавиатурный Scanner. Программа не должна ждать ввода. Строка import для этих демо не нужна.
Внутри Yard.main создайте три строки:
String a = "red";
String b = "red";
String c = "blue";
Напечатайте сравнения:
System.out.println(a.equals(b));
System.out.println(a.equals(c));
Метод equals смотрит на символы. Одинаковый текст возвращает true. Разный текст возвращает false.
public class Yard {
public static void main(String[] args) {
String a = "red";
String b = "red";
String c = "blue";
System.out.println(a.equals(b));
System.out.println(a.equals(c));
}
}
Из папки, где лежит Yard.java, запустите javac Yard.java. Когда скобки, фигурные скобки и точки с запятой совпадают, javac не пишет собственной строки. Затем запустите java Yard — не java Yard.java. Уберите окончание .java из команды запуска. Держите один public-класс в файле, чтобы имя совпадало с Yard.
Экран показывает true, затем false. Пройдите запуск один раз. Java начинает с Yard.main. a.equals(b) сравнивает red с red и печатает true. a.equals(c) сравнивает red с blue и печатает false. Вы вызвали метод у a и передали другую строку как аргумент.
Если вы всё ещё видите tone / honk / beep из файла polymorphism, переключитесь на учебный файл equals и снова запустите java Yard. Если печатаете сами строки вместо результатов equals, на экране будут red и blue — оберните a.equals(b) в println, чтобы появился boolean.
Произнесите правило вслух, глядя на экран: equals спрашивает, совпадает ли текст символ за символом. Не изобретайте окно debugger на этой странице. Debugging ждёт следующего урока.
Сопоставьте == с equals на new String
Вторая программа создаёт два отдельных объекта String через new. Оба хранят текст red. Программа печатает a == b, затем a.equals(b).
public class Yard {
public static void main(String[] args) {
String a = new String("red");
String b = new String("red");
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
Скомпилируйте через javac Yard.java, затем запустите java Yard. Экран показывает false, затем true. Проверка == спрашивает, являются ли a и b точно одним и тем же объектом в памяти. Два вызова new String("red") создают два объекта, поэтому == печатает false. Проверка equals всё ещё смотрит на символы, поэтому печатает true.
Прочитайте две строки в main ещё раз. Первая строка: идентичность через ==. Вторая строка: содержимое через equals. Держите оба print для этой учебной формы, чтобы контраст оставался на одном экране. Если печатаете только ==, вы теряете совпадение содержимого, которое эта страница тоже учит.
На начинающих литералах вроде "red" без new Java может переиспользовать тот же pooled-объект, поэтому == иногда случайно выглядит true. Эта вторая демо намеренно использует new String("red"), чтобы проверка идентичности оставалась ясно false, а содержимое — true. Предпочитайте equals, когда вам важен текст.
Если рядом ещё лежат демо polymorphism, оставьте их как историю. Для этого урока запускайте учебный файл equals, чтобы экран показывал boolean, а не слова horn. Если javac жалуется на дублирующие public-классы, держите public только у Yard.
Сравнение с вызовами polymorphism
На странице polymorphism одно имя метода запускало разные тела через переменные родительского типа. На этой странице одно имя метода — equals — отвечает, хранят ли две строки один текст, а == отвечает, являются ли они одним объектом. Вы по-прежнему компилируете Yard.java и запускаете java Yard. Новые токены — equals, boolean-печати true / false и контраст == с new String.
Если ещё открыт файл Machine t = new Truck(), вы увидите вызовы horn. Переключитесь на файл equals, чтобы main создавал строки и печатал результаты сравнения. Держите демо инструментов debugging вне этой страницы. Держите клавиатурный ввод вне этой страницы.
Что это оставляет для debugging
Эта страница сравнивает содержимое строк и показывает, почему == — неверный выбор по умолчанию для текста. Следующая страница показывает debugging, где вы находите, почему программа ведёт себя плохо, внимательно читая экран и исходник. Оставайтесь с equals и == здесь. Полный walkthrough debugger пока не требуется.
Когда позже вы будете отлаживать неверную ветку, сбой equals — частая причина. Считайте эту страницу половиной сравнения той соседней истории. Завершите обе демо Yard, пока true / false и false / true не станут автоматическими, прежде чем открывать урок debugging.
Перед debugging
Вы можете вызвать a.equals(b) на совпадающем тексте red и увидеть true, затем увидеть false для blue. Вы можете создать два объекта new String("red") и увидеть, как == печатает false, а equals печатает true. Скомпилируйте Yard.java и запустите java Yard для каждой сохранённой демо по очереди. Совпадение содержимого и идентичность объекта остались раздельными. Следующая страница — debugging, где вы ищете ошибки с экраном и исходником рядом.
Держите демо из трёх строк с equals для явной проверки содержимого. Держите демо new String для явного контраста ==. Держите файлы debugging вне этой страницы. Эти три привычки — контрольная точка перед переходом. Когда equals печатает true для совпадающего текста — и когда == печатает false для двух новых объектов с этим текстом — урок сделал своё дело, и вы готовы к следующей теме о debugging.
Ещё один проход по папке: один public Yard, сравнения строк в main, без ожидания клавиатуры, без принудительного debugger. Ещё раз запустите javac Yard.java и java Yard на демо, которую держите открытой. Если экран всё ещё печатает ожидаемые boolean, история сравнения крепка, и курс может перейти к debugging на следующей странице.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху