== kann man auch mit Objekten benutzen. Da ist es aber kein "equals" sondern ein "same".
Deswegen sagte ich auch "Vergleichsoperator" (und meinte dabei die im Namen enthaltene Gleichheit). Ist aber missverständlich, zugegeben. In jedem Fall will er hier aber die Gleichheit des Wertes ermitteln und nicht die der Identität des Objekts. Inbesondere in Java ist es ein häufiger Fehler, dass mittels `==` die Werte verglichen werden sollen - und ein durchaus nachvollziehbarer, müssen doch für die selbe Prüfung zwei verschiedene Wege (Operator vs. Methode) benutzt werden. Mir fällt auf Anhieb keine andere Sprache ein, die diese Schwäche besitzt (macht z.B. C# das besser?)
Und das mit dem Operator-Overloading, wie man es beispielsweise von C(++) kennt, lassen wir mal. Das hat insgesammt wohl mehr geschadet als genutzt.
Wie gut Operator Overloading funktionieren kann, sieht man in mehreren Sprachen von Perl über Ruby und Python bis Haskell. Ich finde es durchaus besser, Methoden mit besonderen Namen wie `__eq__` oder `__gt__` oder `__add__` zu implementieren und sie dann über (auch mit weniger Schreibarbeit verbundene) Standardoperatoren implizit aufzurufen, zumal es dadurch Anfängern nicht so leicht passiert, dass sie ihren Methoden Namen geben, die bereits "reserviert" sind und das Verhalten von Objekten überraschend ändern könnten.