Czy dwa obiekty będą zawsze równe, gdy ich metoda CompareTo() zwróci zero?
Czy dwa obiekty będą zawsze równe, gdy ich metoda CompareTo() zwróci zero?
Anonim

Ono jest polecam to porównać do tylko zwroty 0, jeśli wezwanie do równa się na te same przedmioty zrobiłbym powrót prawda: porównać do (e2) == 0 Ma to samo wartość logiczna jako e1. równa się (e2) dla każdego e1 i e2 klasy C. Zauważ, że null jest nie jest instancją żadnej klasy, i e.

Co więcej, czy równanie równości () może zwrócić wartość false, nawet jeśli zawartość dwóch obiektów jest taka sama?

4 odpowiedzi. W java metoda public boolean równa się ( Obiekt obj) jest dziedziczony z Obiekt . Jednak wdrożenie metody określonej w Obiekt klasa jest taka, że równa się metoda będzie zwróć, jeśli i tylko Jeśli ten dwa obiekty porównywane są To samo instancja.

Następnie pojawia się pytanie, dlaczego metoda CompareTo () powinna być spójna z metodą równa się () w Javie? Dzieje się tak, ponieważ interfejs Mapy jest zdefiniowany w kategoriach równa się operacja, ale mapa wykonuje wszystkie kluczowe porównania za pomocą swojego porównać do (lub porównaj) metoda , więc dwa klucze, które są uważane równy przez to metoda są, z punktu widzenia posortowanej mapy, równy.

Mając to na uwadze, jaka jest różnica między metodą == equals () a metodą CompareTo ()?

porównać do : Porównuje dwa ciągi leksykograficznie. równa się : porównuje ten ciąg z określonym obiektem. porównać do porównuje dwa ciągi znaków według ich znaków (o tym samym indeksie) i odpowiednio zwraca liczbę całkowitą (dodatnią lub ujemną). równa się() sprawdza, czy dwa obiekty są takie same, czy nie i zwraca wartość logiczną.

Czy możemy nadpisać metodę CompareTo?

Zastąp porównanie do metody Powinien zwrócić ujemną liczbę całkowitą (zwykle -1), jeśli bieżący obiekt wyzwalający jest mniejszy niż przekazany jeden i dodatnia liczba całkowita (zwykle +1), jeśli jest większa niż i 0, jeśli jest równa. Metoda porównaj do powinien zgłaszać wyjątek, jeśli przekazany obiekt ma niezgodny typ lub null.

Zalecana: