Ho fissato un ciclo infinito cambiando il numero intero su INT in quanto segue:
public class IntTest {public static void main(String args) {Integer x=-1;Integer total=1000;while(x != total){System.out.println("x =" + x + "total ="+ total);x++;}}}
Qual è la ragione giusta per questo? Pensavo che Integer non paragoni alcun problema.
Grazie.
Risposte:
17 per la risposta № 1
Perché quando lo fai! = Confrontando nell’oggetto, confronta i riferimenti. E i riferimenti tra due oggetti in generale sono diversi.
Quando le voci vengono confrontate, i primitivi vengono sempre confrontati, diciamo che nessun riferimento (nessun oggetto), ma valori.
Pertanto, se si desidera lavorare con Integer, devi Usa uguale () in essi.
Inoltre, se i valori sono tra 0 e 255, il confronto tra numeri interi funziona bene, a causa della cache.
Puoi leggere qui: http://download.oracle.com/javase/tutorial/java/data/numberclasses.html
6 per la risposta № 2
Integer
è un Object
, e gli oggetti vengono confrontati con .equals(..)
vengono confrontati solo primitivi con ==
che è la regola, a parte alcuni casi eccezionali, dove ==
può essere utilizzato per confrontare gli oggetti. Ma anche allora non è consigliabile.
2 per la risposta № 3
Il problema è che intero è una classe e quindi, anche il confronto è fatto come per qualsiasi altra classe, utilizzando il metodo .equals () (). Se lo confronta con ==, confronta i riferimenti che sono sempre diversi per due casi diversi. Il tipo primitivo int
non è una classe, ma un tipo Java incorporato e il confronto viene gestito soprattutto dal compilatore e funziona come previsto.
2 per la risposta № 4
È possibile utilizzare Integer.intValue () per ottenere il valore INT per il confronto, se hai davvero bisogno di utilizzare Intere.
1 per la risposta № 5
intero è una busta di classe attorno alla Java Tipo primitivo int. Non sono la stessa cosa. È necessario utilizzare INT invece di Integer, a meno che tu non abbia un motivo valido (come ArrayList<Integer> list
;
0 Comments Leave a comment