Podczas testowania równości String
w Javie zawsze używałem, equals()
ponieważ wydaje mi się, że jest to najbardziej naturalna metoda. W końcu jego nazwa już mówi, co ma zrobić. Jednak mój kolega niedawno powiedział mi, że nauczono mnie używać compareTo() == 0
zamiast equals()
. Wydaje mi się to nienaturalne (co compareTo()
ma na celu zapewnienie porządku, a nie porównywanie dla równości), a nawet trochę niebezpieczne (ponieważ compareTo() == 0
niekoniecznie oznacza to równość we wszystkich przypadkach, chociaż wiem, że tak String
jest dla mnie).
Nie wiedział, dlaczego nauczono go używać compareTo()
zamiast equals()
for String
, a ja też nie mogłem znaleźć żadnego powodu dlaczego. Czy to naprawdę kwestia osobistego gustu, czy też istnieje prawdziwy powód dla którejkolwiek z metod?
compareTo() == 0
niekoniecznie oznacza równość we wszystkich przypadkach”. To jest absolutnie poprawne! Dokładnie to oznacza wyrażenie „zgodne z równymi” w specyfikacji interfejsu API języka Java, na przykład w specyfikacji klasy Comparable . Na przykład metoda porównania String jest zgodna z równymi, ale metoda porównania BigDecimal jest niespójna z równymi.
.equalsIgnoreCase()
jest najszybszym porównaniem, jeśli jest właściwe, w przeciwnym razie.equals()
jest to, czego chcesz.