Question

Je sais que l'un d'eux est au niveau des bits et l'autre est logique, mais je n'arrive pas à comprendre ceci:

Scanner sc = new Scanner(System.in);
System.out.println("Enter ur integer");
int x=sc.nextInt();
if(x=0)//Error...it can not be converted from int to boolean
System.out.println("...");

L'erreur signifie que x ne peut pas être converti en booléen ou que le résultat de x = 0 ne peut pas être converti en booléen .

Était-ce utile?

La solution

== vérifie l'égalité. = est une cession.

Ce que vous faites est: if (x = Blah) - en Java, cette instruction est illégale car vous ne pouvez pas tester l'état d'une instruction d'affectation. En particulier, Java ne traite pas une affectation comme une opération booléenne, obligatoire dans une instruction if. Ceci est en contraste avec C / C ++, qui vous permet de traiter une affectation comme une opération booléenne et qui peut être le résultat de nombreux bugs qui arrachent les cheveux.

Autres conseils

Lorsque vous écrivez 'x = 0', vous dites "Stocker 0 dans la variable x". La valeur de retour sur l'expression entière est '0' (c'est comme ça, vous pouvez donc dire des bêtises comme x = y = 0).

Lorsque vous écrivez 'x == 0', il est indiqué "x est-il égal à 0?". La valeur de retour sur cette expression sera "true" ou "false".

En Java, vous ne pouvez pas simplement dire si (0), car si attend une réponse vraie / fausse. Donc, si if (x = 0) n’est pas correct, mais si (x == 0) est correct.

== est un opérateur de comparaison et = est une affectation.

== is an equality check. if (x == 0) // if x equals 0
= is an assignment. x = 0; // the value of x is now 0

Je sais que la question a été résolue, mais cela revient toujours de temps en temps, non pas en tant qu'erreur de programmeur mais en tant qu'erreur typographique (le programmeur savait ce qu'il voulait dire, mais a échoué). Cela peut être difficile à voir, car les deux ressemblent tellement.

J'ai découvert qu'un moyen d'éviter ce problème est de placer l'expression constante à gauche, comme suit:

if (0 == x) 
   ...

Ainsi, si j’utilise accidentellement un seul " = " signe, le compilateur échouera avec une erreur d’attribution à une expression constante, que l’opérateur d’affectation soit ou non associatif à gauche et que la condition if attend un booléen fortement typé.

if(x=0)

Ici, vous attribuez la valeur 0 à la variable x. L'instruction if en Java ne peut pas évaluer un argument entier comme il le peut dans de nombreux autres langages. En Java, si nécessite un booléen. Essayez

if(x == 0)

faire une comparaison .

Interpréter l'erreur comme signifiant

" l'expression

x=0

ne peut pas être converti en booléen. "

Juste pour clarifier C / C ++ - l’affectation est évaluée sur le bon opérande

if(a = n)

est évalué à n, donc (n = 1) est vrai (n = 0) est faux

Une remarque intéressante: étant donné que l'opérateur d'affectation évalue l'opérande correct, les éléments suivants sont valables en Java (bien que cela ne soit pas beau):

if (( x = blah ) > 0) ...

Les parenthèses sont nécessaires en raison de la priorité de l'opérateur ('>' lie plus fort que '=').

Comme d'autres l'ont déjà dit, "=" est une cession; "==" est comparer.

dans votre changement de programme

  

if (x = 0)

à

  

if (x == 0)

"==" checks for equality



"=" Is used for assignment. 

Cela vous donne une erreur parce que vous attribuez une valeur à x dans if (), où vous êtes censé vérifier l’égalité. Essayez de le changer en égalité au lieu d'opérateur d'affectation.

Comme d’autres l’ont dit, = attribue pendant que == se compare.

Cependant, ces instructions ont également leurs propres valeurs.

L'opérateur = renvoie la valeur de son opérande de droite. Voici comment fonctionnent des instructions telles que a = b = c = 5 : elles sont analysées comme suit: a = (b = (c = 5)) , qui correspond à a = (b = 5) puis a = 5 .

L'opérateur == renvoie un booléen qui est true si ses opérandes sont égaux. L'instruction if exécute son corps si son argument est true . Ainsi, les en-têtes if tels que if (5 == 5) sont traduits en if (true) . C'est pourquoi vous voyez parfois des while infinis en boucle avec l'en-tête while (true) ; la boucle while est exécutée " while " l'argument des orteils est vrai.

Si vous aviez un booléen dans votre instruction if , cela ne générerait aucune erreur et le code serait exécuté si la valeur attribuée (ou "comparée à") était true . C’est pourquoi il est si important de ne jamais mélanger les opérateurs = et == , en particulier lorsque vous travaillez avec boolean s.

J'espère que ça vous a aidé !!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top