W a question regarding the use of typeid
jest C++, zasugerowałem, że można go użyć do porównywania typów w porównaniach obiektów. Nie widziałem zbyt wiele, ale miałem na myśli Java equals
.Jaka jest różnica między operatorem Java equals() i C++ ==?
Looking into Java a bit more, to wydaje się być w przypadku: Some say rzeczywiste klasy dwóch obiektów powinny być porównywane, a some sayinstanceof
jest właściwym narzędziem do wykorzystania, z możliwością podwójnego wysyłki. Istnieją oczywiście przypadki, w których jeden z nich jest zdecydowanie bardziej odpowiedni, ale przynajmniej both options are considered.
W C++, OTOH, ledwo mogłem znaleźć kod, w którym porównywane są rzeczywiste typy. W większości przypadków używana jest podwójna wysyłka (z dynamic_cast
) i nie mogłem znaleźć nikogo, kto nalegałby na szybkie porównanie typów, co należy zrobić na początku sprawdzania równości.
Zastanawiam się, dlaczego problem polimorficznego porównywania typów ma dwa dopuszczalne rozwiązania w Javie, podczas gdy w C++ tylko jeden wydaje się być uważany za najlepszą praktykę? Czy istnieją znaczne różnice techniczne, czy tylko różne podejścia?
Uwaga: Moje roszczenia opierają się na wrażeniu, a nie konkretnej wiedzy. Jeśli są one błędne, a Java i C++ są rzeczywiście podobne pod tym względem - lub inne z powodów innych niż powyższe, to oczywiście będzie to akceptowalna odpowiedź.
W języku C++ '==' może być przeciążone - więc zależy to od kontekstu ... – Schnommus
@Schnommus: W Javie 'equals' może zostać nadpisany. Nie ma dużej różnicy. –
@Ben Voigt: Dobra uwaga. Skasowałbym swój komentarz, gdyby nie dla czytelnika – Schnommus