2010-10-22 3 views
4

Я только что закончил свой первый год Java, и я рассматривал исходный код JDK как упражнение.Java - одновременное назначение двух выражений одной переменной

Я столкнулся с тем, с чем я никогда не сталкивался раньше, когда в одной и той же инструкции были две назначения одной и той же переменной.

например. Выражение

переменная = = выражение;

Что именно происходит здесь? Это довольно распространенная вещь? Какова цель двойного назначения?

Большое спасибо -Mike

+1

Если вы выложили пример, было бы легче ответить ... –

+0

что это возможно? variable = otherVariable = выражение имеет смысл – willcodejavaforfood

+0

Я думал, что это вопрос мьютекса после просмотра заголовка:] – frbry

ответ

6
variable1 = variable2 = expression; 

Можно записать как

variable2 = expression; 
variable1 = variable2; 

Это происходит потому, что знаки равенства вычисляются справа налево, после всего else оценивается (в основном, самая низкая операция в порядке работы).

Это обычно считается липким, и я бы не советовал его.

3

Я полагаю, ты имел в виду

variable1 = variable2 = expression; 

В этом случае выражение будет просто присваивается обеим переменным.

Это можно записать в виде

variable1 = expression; 
variable2 = expression; 

Таким образом, вы можете использовать стиль, описанный в вашем вопросе просто сделать код короче и изящнее.

+5

Это * не * более элегантный. Короче говоря, это не всегда хорошая вещь. – Qwerky

+1

Я думаю, что в оригинале выражение будет оцениваться только один раз. В вашей перезаписи он будет оцениваться дважды. –

+0

Qwerky, я согласен с вами, что Короче говоря, не всегда хорошая вещь. Но этот случай, как и мне, элегантен. Как и для меня :) –

0

Это законно, но в целом обескуражен. Even's Sun's standard s рекомендует против.

Edit:
Как и другие люди, я предполагаю, что вы имеете в виду variable1 = variable2 = expression;

+0

Стандарты Java говорят о независимых операторах coulpe на одном подобном. В нашем случае это немного другое. –

1

Вы не можете одновременно назначать два выражения одной переменной.

 
variable = 3 = 2; 

Этот код не компилируется. Может быть, вы что-то вроде этого видеть:

 
variable = x = 3; 

В этом случае, это на самом деле переменная = переменная = выражение и назначение такое же выражение для двух переменных. Это возможно, потому что значение операции присваивания - это назначенное значение. Поэтому в этом конкретном случае сначала выполняется x = 3 и имеет значение 3, которое затем назначается variable.

1

Это потому, что в Java-присваивания есть возврат (результат левого выражения)!

Его очень полезно использовать в петлях, как при чтении файлов в массив байтов: вы можете отслеживать Num байтов прочтенных и знать, когда файл через:

InputStream is=...... 
byte[] b=new byte[1024]; 
int read; 
for(;read=is.read(b)>0;){ 
    //do stuff knowing how many bytes hav been readed 
} 
Смежные вопросы