2013-03-26 6 views
0

Какой логический оператор получает «приоритет» или «читает» впереди другого, так сказать.Как использовать/&& и || в том же условии if statement?

Например:

if(x=y || y=y && x=x){} 

является Java читать это как: Один из этих двух: (х = у || у = у), и (х = х)

или как: или (х = у) или (у = у и х = х)


Похоже, что-то, что бы попросили или, по крайней мере, легко найти, но увы, «и» + «или» ключевые слова в Google ,

+0

какой-либо причине не мог просто проверить это самостоятельно? –

+5

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html – Jayan

+2

В таких случаях всегда используйте скобки для чтения четкости – Krease

ответ

5

Оператор && имеет более высокий приоритет, чем ||, поэтому сначала оценивается &&.

http://introcs.cs.princeton.edu/java/11precedence/

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

Обратите внимание, что в коде вы пишете

x=y 

, что на самом деле оператор присваивания, а не оператор равенства. Предположительно вы намерены

x==y 
+3

Прикомандировано к использованию '()' для разделения логических операторов. Это делает код намного легче читать и делает ваш смысл прозрачным. – ajp15243

+0

Данг, ты сказал все, что я хотел сказать, в дополнение к тому, чтобы связать порядок приоритета. +1 – Krease

+0

Спасибо! Я знаю на обоих счетах, просто спрашивал. Кроме того, x == x не имеет никакого смысла. – House3272

0

x=y || y=y && x=x может работать только тогда, когда оба х и у являются логическими, так как = это назначение, и оно эквивалентно y || y && y, потому что вы назначены х = у, как в первой операции

Смежные вопросы