2010-04-29 4 views
4

je tentais d'écrire une méthode simple:« affectation incorrecte » erreur de l'opérateur de ==

boolean validate(MyObject o) 
{ 
    // propertyA && propertyB are not primitive types. 
    return o.getPropertyA() == null && o.getPropertyB() == null; 
} 

Et une étrange erreur obtenu sur la partie == null:

Erreur de syntaxe sur jeton == . Opérateur d'affectation non valide.

Peut-être que mon Java est rouillé après une saison en PLSQL. J'ai donc essayé un exemple plus simple:

Integer i = 4; 
i == null; 
// compile error: Syntax error on token ==. Invalid assignment operator. 

Integer i2 = 4; 
if (i == null); //No problem 

Comment cela peut-il être?

J'utilise jdk160_05.

Pour clarifier: Je n'essaie pas d'assigner quoi que ce soit, il suffit de faire une opération && entre deux valeurs booléennes. Je ne veux pas faire:

if (o.propertyA() == null && o.propertyB() == null) { return true; } 
else { return false; } 
+1

Vas-y! Downvoter soin de commenter? – Tom

+0

Je n'ai pas voté pour vous, mais je pense qu'ils pensent que c'est une question tellement stupide et évidente que vous semblez être à la traîne. – Pyrolistical

+0

Plus tôt la question était insuffisante et a été en mesure de donner la réponse basée sur cela – gmhk

Répondre

4

Je ne pense pas que vous confondiez affectation et comparaison d'égalité. Je pense que votre compilateur vous donne juste un message d'erreur confus. Ce programme:

Integer i = 4; 
i ==null; 

devrait donner une chose d'erreur comme ceci:

Program.java:8: not a statement 
       i ==null; 

Votre premier programme devrait compiler correctement. Peut-être y a-t-il un caractère Unicode invisible dans le texte qui perturbe le compilateur. Essayez de supprimer toute la fonction et de la saisir à nouveau.

+3

Merci d'y avoir réfléchi et de ne pas avoir donné la réponse «tu ne peux pas t'attribuer». – Tom

+0

?alors as-tu résolu ton problème ou non? – Pyrolistical

+0

@Politique. Cela a aidé plus que toutes les autres réponses. – Tom

9

== n'est pas un opérateur d'affectation, il est un opérateur d'égalité booléenne, voir:

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.21.2

Si vous voulez que je définie sur null utilisation simple opérateur d'affectation =:

i = null; 

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.1

Si vous voulez vérifier que i est nul, alors vous devez utiliser l'opérateur ==

if (i == null) 
+0

Je ne veux rien assigner. Voir ma mise à jour s'il vous plaît. – Tom

+0

Pouvez-vous s'il vous plaît expliquer ce que vous essayez de faire alors ... votre question est un peu confuse ... – Jon

+0

Donc je ne peux pas faire quelque chose comme 'return i == null'? Difficile à croire. – Tom

1

En PL/SQL, l'attribution d'une valeur à une variable est fait avec l'opérateur :=. La comparaison de deux valeurs est faite avec =.

En Java, l'affectation d'une valeur à une variable est effectuée avec l'opérateur =. La comparaison de deux valeurs est faite avec ==, ou une méthode .equals() dans certains cas.

Vous pouvez faire des choses comme ceci:

x = i==null; 

Cela permettra de tester si i est null et si oui, la valeur true sera affectée à x (en supposant que x est un booléen).

4

Je pense que je vois votre problème. Je suis désolé que les autres réponses ne l'abordent pas.

Ainsi, Java a cette idée qui est partagée par d'autres langues que juste parce que quelque chose est une expression valide ne signifie pas que cette chose, par lui-même, est une déclaration valide.

Par exemple, ce code se plaindra similaire:

Integer i = 4; 
i+3; // this line gives a compilation error 

Et pourtant, de toute évidence, je peux utiliser i+3 (aller unboxing!) Ailleurs signifie "7":

System.out.println(i+3); // this is fine 

Il obtient un peu confusion car contrairement à certaines langues qui ont cette distinction expression/instruction, java vous permet d'utiliser n'importe quel appel de méthode - qu'il renvoie une valeur ou non - comme une déclaration. Cependant, la plupart des opérateurs Java ne forment pas, par eux-mêmes, une déclaration valide.

De même, il ne peut pas compiler:

Integer i = 4; 
i; // this line gives a compilation error 

Pour tous les détails sordides, voir http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#32588

+0

Merci d'y avoir réfléchi. – Tom

Questions connexes