Groovy - = = - operator
Bis jetzt, mein Verständnis war, dass ==
ist ein operator-überladung für .equals()
. Allerdings habe ich vor kurzem entdeckt, dass
new Integer(1) == new Long(1) //returns true
in der Erwägung, dass
new Integer(1).equals(new Long(1)) //returns false
also ich denke ==
ist nicht gerade ein Kürzel für .equals()
, also wie kommt es zu bestimmen, Gleichheit?
- Dieses fährt Fort, mich zu beissen, wenn mit GORM, der seit Langem die Datenbank-IDs. Anfragen von JSON generierten integer-Werte nachgeben Verhalten wie: groovy:000> m = [1L : 'foo'] ===> [1:foo] groovy:000> m.containsKey(1L) ===> true groovy:000> m.containsKey(1) ===> false
Du musst angemeldet sein, um einen Kommentar abzugeben.
==
in Groovy ist in etwa vergleichbar mitequals()
jedoch, Sie finden es unterscheidet sich von Java beim Vergleich verschiedener Klassen mit dem gleichen Wert - wenn die KlasseComparable
. Groovy auch nicht die Typumwandlung, wenn möglich.Wenn Sie schauen Sie sich den code, wie es aussieht, letztlich
compareToWithEqualityCheck()
wird ausgeführt, für==
.Es stellt sich heraus
==
nicht delegieren zuequals()
es die DelegiertencompareTo
. So==
gibt true zurück, wenna.compareTo(b)
gibt 0 zurück,So, in diesem speziellen Fall
deshalb:
aber das bedeutet nicht unbedingt, dass
Der Grund, warum dies alles so seltsam und verwirrend ist, weil die Vertrag von Vergleichbaren nicht verlangen, dass Sie konsistent mit equals, aber es ist dringend empfohlen.