Warum Java nicht sieht, dass Ganzzahlen gleich sind?
Habe ich ganze zahlen, die sollen gleich sein werden (und ich überprüfe es, indem Sie output). Aber in meinem if
Bedingung in Java nicht sehen, wie diese Variablen den gleichen Wert haben.
Ich habe den folgenden code:
if (pay[0]==point[0] && pay[1]==point[1]) {
game.log.fine(">>>>>> the same");
} else {
game.log.fine(">>>>>> different");
}
game.log.fine("Compare:" + pay[0] + "," + pay[1] + " -> " + point[0] + "," + point[1]);
Und es produziert die folgende Ausgabe:
FINE: >>>>>> different
FINE: Compare:: 60,145 -> 60,145
Wahrscheinlich muss ich hinzufügen, dass point
ist folgendermaßen definiert:
Integer[] point = new Integer[2];
sowie pay
uns genommen aus dem loop-Konstruktor:
for (Integer[] pay : payoffs2exchanges.keySet())
So, in diesen zwei Variablen, beide haben den Typ integer.
InformationsquelleAutor der Frage Roman | 2010-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Objekte (wie
Integer
s) sollten nicht verglichen werden, durch==
aber durch.equals()
.Was wichtig zu verstehen ist, dass mehrere verschiedene
Integer
Objekte darstellen kann, die gleichen int-Wert. Wenn Ihr Programm druckt>>> different
es sagt einfach, dass das erste Objekt ist nicht das gleiche Objekt als das zweite Objekt. (Während Sie wahrscheinlich wollen, um zu vergleichen, die Objekte basierend auf dem Wert, den Sie repräsentieren.)Aus der official guide auf autoboxing:
Kann es sein, erwähnenswert, dass autoboxing ist garantiert die Rücksendung des Objekts, für ganzzahlige Werte im Bereich [-128, 127], aber eine Umsetzung kann nach eigenem Ermessen die cache-Werte außerhalb dieses Bereichs.
Meine Allgemeine Empfehlung ist die Verwendung
int
stattInteger
für alle lokalen /member-Variablen. In diesem speziellen Fall scheinen Sie zum speichern von Koordinaten in einem 2-element-array. Ich würde vorschlagen, dass Sie diese Kapseln in eineCoordinates
Klasse oder ähnliches und das überschreiben der equals-Methode (und hashCode) in hier.Siehe auch
InformationsquelleAutor der Antwort aioobe
Wenn Sie waren einfach
int
Typen, die es funktionieren würde.Für
Integer
verwenden.intValue()
odercompareTo(Object other)
oderequals(Object other)
in Ihrem Vergleich.InformationsquelleAutor der Antwort sje397
Gibt es zwei Arten zu unterscheiden, hier:
int
die primitive integer-Typ, die Sie verwenden die meisten der Zeit, aber es ist nicht ein Objekt-TypInteger
einen Objekt-wrapper um eineint
die verwendet werden können, verwenden Sie ganze zahlen in die APIs, die erforderlich ObjekteInformationsquelleAutor der Antwort Bart van Heukelom
In java numerische Werte im Bereich von -128 bis 127 werden zwischengespeichert, so dass, wenn Sie versuchen, zu vergleichen
dies funktionieren würde, aber wenn Sie versuchen, mit den zahlen aus dem oben genannten Bereich geben, die Sie benötigen, um im Vergleich mit der equals-Methode für Wert-Vergleich, weil "==" prüft, ob beides das gleiche Objekt nicht dasselbe Wert.
InformationsquelleAutor der Antwort Nayan Srivastava
beim vergleichen zweier Objekte (und ein Integer ist ein Objekt und keine variable) das Ergebnis wird immer sein, dass Sie nicht gleich sind,
in Ihrem Fall sollten Sie vergleichen die Felder der Objekte (in diesem Fall intValue)
versuchen, die Deklaration von int-Variablen statt Integer-Objekte, wird es helfen,
InformationsquelleAutor der Antwort Andrzej Bobak
Den Zustand zu
Ausdruck, verwendet der Gleichheits-operator == für den Vergleich eines Referenz -
für die Gleichstellung mit der Referenz
Im Allgemeinen, wenn primitiv-Typ-Werte (int, ...) sind im Vergleich mit == , ist das Ergebnis true, wenn beide Werte identisch sind. Wenn Literatur (wie Integer, String, ...) sind im Vergleich mit == , das Ergebnis ist true, wenn beide Referenzen auf dasselbe Objekt im Speicher.
Vergleichen Sie die eigentlichen Inhalte (oder Status-Informationen) von Objekten, die Gleichheit, eine Methode aufgerufen werden muss.
So, mit dieser
Ausdruck, den Sie erstellen ein neues Objekt, das hat eine neue Referenz, und weisen Sie es-zu-Punkt-variable.
Beispiel:
Vergleichen a mit b Verwendung:
weil beide von Ihnen sind primitiv-Typ Werte.
Vergleichen mit c Verwendung:
weil der auto-boxing-feature.
vergleichen c mit e Verwendung:
weil der neue Referenz in e variable.
zum vergleichen von c mit d ist es besser und sicher zu bedienen:
weil:
InformationsquelleAutor der Antwort MMKarami