Да, вы полагаетесь на == сравнение на равенство, а не идентичность. Измените код на:
if (s.getDeparturePort().equals("hamburg")) {
System.out.println(s.toStringAdjusted());
}
Для ссылочных типов == в Java всегда означает «сравнить две ссылки на равенство». Другими словами, возвращается, ссылаются ли две ссылки на один и тот же объект.
Вы хотите проверить, равны ли две строки , т. Е. Содержат ли они одинаковую последовательность символов. Вот для чего нужен переопределенный метод equals
.
(Чтобы продемонстрировать это на практике, каждое утро я сажусь на автобус номер 36. Для меня эти автобусы равны , равному , потому что они едут по тому же маршруту, но я знаю, что есть несколько автобусы номер 36 - я не сижу на одном и том же физическом автобусе каждый день.)
Обратите внимание, что приведенный выше код будет выбрасывать NullPointerException
, если s.getDeparturePort()
вернет null
. Есть два способа избежать этого. Во-первых, вы можете использовать ссылку, известную как ненулевое, в качестве цели вызова метода:
if ("hamburg".equals(s.getDeparturePort()))
Кроме того, вы можете выполнить явную проверку недействительности:
String port = s.getDeparturePort();
if (port != null && port.equals("hamburg"))
Или вы можете оставить это, чтобы вызвать исключение, если это наиболее подходящее поведение (т.е. если вы действительно не ожидаете, что getDeparturePort()
вернет ноль, и хотите взорвать, если вы получите такие плохие данные, вместо того, чтобы продолжать и возможно распространение проблемы).