Comparaison d’objets entiers vs int – java

J’ai corrigé une boucle sans fin en changeant entier sur INT dans ce qui suit:

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++;}}}

Quelle est la bonne raison pour cela? Je pensais que l’entier ne comparerait pas de problème.

Merci.

Réponses:

17 pour la réponse № 1

Parce que lorsque vous faites! = Comparer dans l’objet, comparez les références. Et les références entre deux objets en général sont différentes.

Lorsque les entrées sont comparées, les primitives sont toujours comparées, disons aucune référence (aucun objet), mais des valeurs.

Par conséquent, si vous souhaitez travailler avec un entier, vous devez Utilisez des égaux () en eux.

De plus, si vos valeurs sont comprises entre 0 et 255, la comparaison entre les entiers fonctionne bien, en raison de la mise en cache.

vous pouvez lire Ici: http://download.oracle.com/javase/tutorial/java/data/numberclasses.html

6 pour la réponse № 2

Integer est un Object, et les objets sont comparés à .equals(..)

ne sont que des primitives comparées avec ==

C’est la règle, à part certains cas exceptionnels, où == peut être utilisé pour comparer des objets. Mais même alors, il n’est pas conseillé.

2 pour la réponse № 3

Le problème est que le problème est que l’entier est une classe et même, même la comparaison est faite comme pour toute autre classe, à l’aide de la méthode .egsals () (). Si vous le comparez à ==, comparez les références toujours différentes pour deux instances différentes. Le type primitif int n’est pas une classe, mais un type Java intégré et la comparaison est traitée notamment par le compilateur et fonctionne comme prévu.

2 pour la réponse № 4

Vous pouvez utiliser INTEGER.IntValue () pour obtenir la valeur INT pour la comparaison, si vous avez vraiment besoin d’utiliser entier.

1 pour la réponse № 5

Integer est une enveloppe de classe autour de la Java type primitif int. Ce n’est pas la même chose. Vous devez utiliser int au lieu d’entier, sauf si vous avez un motif valide (tel que ArrayList<Integer> list;

;

Leave a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *