A partire da Java 1.5, puoi praticamente scambiarti Integer
con int
molte situazioni.
Tuttavia, ho trovato un potenziale difetto nel mio codice che mi ha sorpreso un po '.
Il seguente codice:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
sembra che abbia impostato erroneamente la mancata corrispondenza quando i valori erano uguali, anche se non riesco a determinare in quali circostanze. Ho impostato un punto di interruzione in Eclipse e ho visto che i Integer
valori erano entrambi 137, e ho ispezionato l'espressione booleana e ha detto che era falso, ma quando l'ho scavalcato, stava impostando la mancata corrispondenza su vero.
Modifica del condizionale in:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
risolto il problema.
Qualcuno può fare luce sul perché questo è successo? Finora ho visto solo il comportamento sul mio localhost sul mio PC. In questo caso particolare, il codice ha superato con successo circa 20 confronti, ma non è riuscito il 2. Il problema era costantemente riproducibile.
Se si tratta di un problema prevalente, dovrebbe causare errori negli altri nostri ambienti (sviluppo e test), ma finora nessuno ha segnalato il problema dopo centinaia di test che eseguono questo frammento di codice.
Non è ancora legittimo utilizzare ==
per confrontare due Integer
valori?
Oltre a tutte le risposte dettagliate di seguito, il seguente link stackoverflow contiene alcune informazioni aggiuntive. In realtà avrebbe risposto alla mia domanda originale, ma poiché non ho menzionato l'autoboxing nella mia domanda, non è stato visualizzato nei suggerimenti selezionati:
Perché il compilatore / JVM non può semplicemente fare in modo che l'autoboxing “funzioni”?