104 votes

Pourquoi fait (j’ai < = j && j < = i && i ! = j) sont évaluées à TRUE ?

J’ai écrit un morceau de code Java qui s’exécute dans une boucle infinie.

Voici le code :

Dans le code ci-dessus, tout en voyant l’État dans la boucle, dans un premier temps, il semble que ce programme ne va pas à l’intérieur de la boucle. Mais en fait c’est une boucle infinie et maintient d’impression de la valeur.

Que se passe-t-il ici ?

188voto

Juned Ahsan Points 33217
  • i <= j est évaluée à l' true, parce que l'auto unboxing qui se passe pour les int les comparaisons et les deux i et j détiennent la valeur par défaut, 0.

  • j <= i est évaluée à l' true en raison de la au-dessus de la raison.

  • i != j est évaluée à l' true, parce que les deux i et jsont les différents objets. Et tandis que les objets de comparaison, il n'y a pas besoin de auto unboxing.

Toutes les conditions sont remplies, et vous n'êtes pas en changeant i et j dans la boucle, de sorte qu'il est en cours d'exécution à l'infini.

40voto

Ashwin Points 2011

Parce que vous comparez

  • ``
  • ``
  • comme vous créez des objets, pas une comparaison primitive. Si la valeur est * *.

17voto

Colonel Panic Points 1237

Les objets entiers sont différents. Il est différent du type de base int.

Voir cette réponse : lors de la comparaison de deux entiers dans Java auto-unboxing produit-elle ?

La `` partie est vraie, qui vous vous attendiez à avoir la valeur false.

1voto

Silviu Burcea Points 2065

La boucle ne se termine pas parce que votre condition est vraie (i ! = j est vrai parce qu’il y a 2 objets différents, utilisez plutôt les Integer.valueOf) et à l’intérieur de la boucle les valeurs ne changent pas alors votre condition reste vraie pour toujours.

1voto

Krichevskoy Points 159

Les objets entiers sont différents. Il est différent du type de base int. donc vous pouvez juste faire comme ça. ce que vous faites, il a juste comparer l’objet et bien sûr, le résultat est vrai.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X