MODIFICA: OK, OK, ho letto male. Non sto confrontando un int con un intero. Debitamente annotato.Che cosa fa esattamente il confronto degli interi con ==?
Il mio libro SCJP dice:
Quando == viene utilizzato per confrontare un primitivo ad un involucro, l'involucro sarà scartato e il confronto sarà primitiva alla primitiva.
Quindi si potrebbe pensare che questo codice dovrebbe stampare true
:
Integer i1 = 1; //if this were int it'd be correct and behave as the book says.
Integer i2 = new Integer(1);
System.out.println(i1 == i2);
ma esso stampa false
.
Inoltre, secondo il mio libro, questo dovrebbe stampare true
:
Integer i1 = 1000; //it does print `true` with i1 = 1000, but not i1 = 1, and one of the answers explained why.
Integer i2 = 1000;
System.out.println(i1 != i2);
Nope. È false
.
Cosa dà?
Ecco, io non sono sicuro se questa parte del libro è scritto male o sono un idiota, ma non riesco a capire cosa dice la ragione. Il mio miglior tentativo di comprensione è che == sia trattato diversamente da! =. Forse == riflette l'uguaglianza di valore (uguaglianza profonda) ma! = No. In ogni caso, quello che dice il libro non accade comunque all'IRL. –
No, il problema in questo caso si trova nei due tipi che stai confrontando. == e! = si comportano allo stesso modo. – EboMike
Solo questo esempio è sufficiente per farmi pensare che Java sia una specie di scherzo malato invece di un vero linguaggio di programmazione. – dsimcha