Ab Java 1.5, können Sie ziemlich viel Austausch Integer
mit int
in vielen Situationen.
Ich habe jedoch einen möglichen Fehler in meinem Code gefunden, der mich ein wenig überrascht hat.
Der folgende Code:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
schien die Nichtübereinstimmung falsch einzustellen, wenn die Werte gleich waren, obwohl ich nicht feststellen kann, unter welchen Umständen. Ich habe in Eclipse einen Haltepunkt gesetzt Integer
und festgestellt, dass beide Werte 137 sind. Ich habe den booleschen Ausdruck überprüft und festgestellt, dass er falsch ist. Als ich darüber trat, wurde die Nichtübereinstimmung auf true gesetzt.
Ändern der Bedingung in:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
Das Problem wurde behoben.
Kann jemand etwas Licht ins Dunkel bringen, warum dies passiert ist? Bisher habe ich das Verhalten auf meinem lokalen Host nur auf meinem eigenen PC gesehen. In diesem speziellen Fall hat der Code etwa 20 Vergleiche erfolgreich bestanden, ist jedoch bei 2 fehlgeschlagen. Das Problem war durchweg reproduzierbar.
Wenn es sich um ein weit verbreitetes Problem handelt, sollte es in unseren anderen Umgebungen (Entwickler und Test) Fehler verursachen. Bisher hat jedoch niemand das Problem nach Hunderten von Tests gemeldet, bei denen dieses Code-Snippet ausgeführt wurde.
Ist es immer noch nicht legitim, ==
zwei Integer
Werte zu vergleichen ?
Zusätzlich zu all den feinen Antworten unten enthält der folgende Stackoverflow-Link einige zusätzliche Informationen. Es hätte tatsächlich meine ursprüngliche Frage beantwortet, aber da ich Autoboxing in meiner Frage nicht erwähnt habe, wurde es in den ausgewählten Vorschlägen nicht angezeigt:
Warum kann der Compiler / die JVM Autobobing nicht einfach "einfach funktionieren" lassen?