Podczas testowania równości Stringw 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() == 0zamiast 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() == 0niekoniecznie oznacza to równość we wszystkich przypadkach, chociaż wiem, że tak Stringjest 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() == 0niekoniecznie 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.