Vergleichen Sie zwei primitive long-Variablen in java
Der Titel ist ziemlich selbsterklärend. Ich bin bewegt von C# auf Java. Ich habe eine Objekt-und eine getter-Methode gibt die zugehörige ID. Ich will vergleichen die ids der zwei Objekte des gleichen Typs und überprüfen, ob die Werte für die ids gleich sind.
versucht:
obj.getId() == obj1.getId();
Long id1 = obj.getId();
Long id2 = obj1.getId();
assertTrue(id1.equals(id2))
assertTrue(id1== id2)
- Eigentlich ist diese Frage ist verwirrend, denn es ist nicht zu vergleichen, aber zum testen für Gleichheit. Siehe docs.oracle.com/javase/7/docs/api/java/lang/...
- Sie sind nicht versuchen zu vergleichen, zwei primitive sehnt sich danach, Sie versuchen, zu vergleichen, zwei boxed Lange.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In java:
==
Betreiber sagt Sie, wenn die beiden Operanden sind der gleichen Objekt (Instanz)..equals()
Methode aufLong
sagt Ihnen, wenn Sie sind Wert.Aber man sollte Sie nicht tun, entweder. Der richtige Weg, es zu tun, ist dies:
Mit
assertEquals()
- falls die assertion fehlschlägt, wird die Fehlermeldung wird Ihnen sagen, was die beiden Werte wurden, wie zBexpected 2, but was 5
etcVersuchen dabei die folgenden:
Müssen Sie nicht gleich mit ==. Entweder:
oder
In beiden Fällen ließ ich die null-überprüfungen, weil ich Zweifel, Sie würden Sie vergessen, wenn Sie gebraucht wurden hier 😉
So, warum ist Lang nicht immer == andere Lange mit dem gleichen Wert? Die Antwort ist einfach. Sie sind unterschiedliche Objekte! Je nach wie Lange abgerufen wurde, Sie seien das gleiche, weil der interne caching. Sehen Lange.valueOf.
Neben all die Kommentare über den richtigen Vergleich, starke Typisierung kann Ihnen helfen, Ihr Problem zu beheben.
Tut getID() return etwas Lang (das ist ein Klasse-Typ) oder vom Typ long (das ist ein primitiver Typ)? Das problem ist, dass wenn die Methode liefert einen primitiven Wert, dann vergleicht man mit "= = " und "equals ()" werden beide arbeiten, weil Java CASTET automatisch primitive in wrapper-Objekte, wenn Sie Sie benötigen.
Aber in die andere Richtung, wenn getID() gibt einen Long-Wert, im Vergleich mit '==' ist wahrscheinlich ein Fehler, weil, der prüft, ob Sie das gleiche Objekt, aber nicht, wenn die Objekte den gleichen Wert haben.
in java,
verwenden
==
zu vergleichen primitive undx.equals(y)
zu vergleichen Objekte.Ich bin mir nicht sicher, was deine Frage ist-es sieht aus wie Sie beide ausprobiert, und habe weder Arbeit?
Hinweis, Sie sind mit
Long
stattlong
, so dass Sie verwenden möchten.equals()
(
long
ist eine primitive,Long
ist ein Objekt)Müssen Sie sich bewusst sein, der Unterschied zwischen
Long
undlong
-long
ist die primitive Art,Long
wrapper-Typ. (Ein bisschen wie ein Stand-alone-Wert in C#, aber stark typisiert ist.) Was ist der Rückgabetyp vongetId()
?Einfach:
sollte in Ordnung sein, wenn Sie tun dies in einem test. Ansonsten könnten Sie verwenden:
wenn Sie sind definitiv nicht null, oder verwenden Sie Guave:
behandeln Nichtigkeit. (Sie können schreiben Sie
- Objekten.gleich
sich selbst, natürlich, aber Sie sollten auf jeden Fall erhalten halten von Guave sowieso, so dass Sie könnte genauso gut verwenden...)Es ist erwähnenswert, dass bestimmte wrapper-Objekte wiederverwendet werden - so zum Beispiel:
Vergleichen zwei primitive verwenden Sie lange, Lange.vergleichen(long x, long y). Diese Methode wurde Hinzugefügt, in java 1.7. Unten ist die Implementierung der Methode:
Beispiel: