2010-10-22 7 views
4

Je viens de terminer ma première année de Java et j'ai regardé le code source du JDK comme un exercice.Java - assigner deux expressions à une seule variable simultanément

Je suis tombé sur quelque chose que je n'avais jamais rencontré auparavant où il y avait deux affectations à la même variable dans la même déclaration.

par exemple.

variables = expression = expression;

Que se passe-t-il exactement ici? Est-ce une chose assez commune? Quel est le but d'une double affectation?

Merci beaucoup -Mike

+1

Si vous avez posté l'exemple, il serait plus facile de répondre ... –

+0

est-ce encore possible? variable = otherVariable = l'expression aurait du sens – willcodejavaforfood

+0

Je pensais que c'était une question de mutex après avoir vu le titre:] – frbry

Répondre

6
variable1 = variable2 = expression; 

Peut être écrit

variable2 = expression; 
variable1 = variable2; 

Ceci est parce que les signes égaux sont évalués de droite à gauche après tout d'autre est évalué (essentiellement l'opération la plus basse dans l'ordre d'opération). Ceci est généralement considéré comme collant, et je ne le conseillerais pas.

3

Je suppose que vous avez voulu dire

variable1 = variable2 = expression; 

Dans cette expression de cas sera simplement affectée aux deux variables.

Cela pourrait s'écrire

variable1 = expression; 
variable2 = expression; 

Ainsi, vous pouvez utiliser le style décrit dans votre question juste pour rendre le code plus court et plus élégant.

+5

Il n'est * pas * plus élégant. Rendre le code plus court n'est pas toujours une bonne chose. – Qwerky

+1

Je pense que dans l'original, l'expression ne sera évaluée qu'une seule fois. Dans votre réécriture, il sera évalué deux fois. –

+0

Qwerky, je suis d'accord avec vous, que raccourcir le code n'est pas toujours une bonne chose. Mais cette affaire, quant à moi, est élégante. Tout comme pour moi :) –

0

C'est légal mais généralement déconseillé. Même Sun's standard s recommandent contre lui.

Edit:
Comme les autres, je suppose que vous voulez dire variable1 = variable2 = expression;

+0

Les normes Java disent à propos des déclarations indépendantes coulpe sur un semblable. Dans notre cas, c'est un peu différent. –

1

Vous ne pouvez pas affecter simultanément deux expressions à une variable.

 
variable = 3 = 2; 

Ce code ne sera pas compilé. Peut-être que vous voyez quelque chose comme ceci:

 
variable = x = 3; 

Dans ce cas, c'est en fait variable = variable = expression et est d'attribuer la même expression à deux variables. Cela est possible car la valeur d'une opération d'affectation est la valeur affectée. Donc dans ce cas précis, le x = 3 est exécuté en premier et a une valeur de 3, qui est ensuite affectée à variable.

1

C'est parce que les affectations Java ont un retour (le résultat de l'expression de gauche)!

Son très utile à utiliser dans des boucles comme lorsque vous lisez des fichiers dans un tableau d'octets: vous pouvez suivre le num d'octets readed et savoir quand le fichier est terminé:

InputStream is=...... 
byte[] b=new byte[1024]; 
int read; 
for(;read=is.read(b)>0;){ 
    //do stuff knowing how many bytes hav been readed 
} 
Questions connexes