Оператор логического И ()) короткое замыкание. Это означает, что правый операнд оценивается только в том случае, если левый операнд имеет значение true.
Поэтому fName != null
оценивается первым.
Если это правда, то оценивается fName.isEmpty()
, и, наконец, вычисляется сам оператор &&
, так как вы не можете его оценить, прежде чем оценивать его операнды.
Вот соответствующие цитаты из JLS:
15.7:
гарантирует язык программирования Java, что операнды операторов, как представляется, оцениваются в определенном порядке оценки, а именно, слева направо ,
15.7.1:
Левый операнд бинарного оператора, как представляется, в полной мере оценены до какой-либо части правого операнда вычисляется.
15.7.2:
языка программирования Java гарантирует, что каждый операнд оператора (за исключением условных операторов & &, ||, и :), как представляется, полностью оценены, прежде чем какой-либо части? самой операции.
Что вы ожидаете от этого? –
Я просто хочу знать, почему компилятор оценивает в порядке с приоритетом –
Возможный дубликат [Каковы правила для порядка оценки в Java?] (Http://stackoverflow.com/questions/6800590/what-are-the- rules-for-evaluation-order-in-java) –