За некоторыми исключениями, выражения могут быть вложены в другие выражения. Таким образом, каждое из них является логическим выражением:
true
false
x > 0
(x >= 0) && (x <= 5)
100 == 100
Integer.parseInt("100") == 100
true & (true) & ((true)) & (((true)))
Что касается, скажем, объявления локальной переменной, вы можете использовать любое выражение (при условии, что оно грамматически и семантически правильно).
Так что в этом нет ничего особенного:
boolean b = (x >= 0) && (x <= 5); // nothing special
На самом деле, вы также можете вкладывать задания так:
x = y = z; // use judiciously!
Глядя на грамматику
Рассмотрим следующую выдержку из спецификации языка Java:
JLS 14.4 Заявления о декларации локальной переменной
A объявление локальной переменной оператор объявляет одно или несколько имен локальных переменных.
LocalVariableDeclarationStatement:
LocalVariableDeclaration ;
LocalVariableDeclaration:
VariableModifiers Type VariableDeclarators
VariableDeclarators:
VariableDeclarator
VariableDeclarators , VariableDeclarator
VariableDeclarator:
VariableDeclaratorId
VariableDeclaratorId = VariableInitializer
VariableDeclaratorId:
Identifier
VariableDeclaratorId [ ]
VariableInitializer:
Expression
ArrayInitializer
Здесь мы видим, что оператор объявления локальной переменной допускает необязательную инициализацию для каждого идентификатора. Каждый VariableInitializer
является грамматически Expression
или ArrayInitializer
.
Таким образом, someType anIdentifer = someExpression;
в этом контексте - просто оператор локальной переменной с инициализатором. someExpression
может быть грамматически любым выражением.
Примечание к ArrayInitializer
ArrayInitializer
такие вещи, как { 1, 2, 3 }
и { 4, 5, 6 }
. Обратите внимание, что грамматическое правило ArrayInitializer
не является частью производства Expression
. Вот почему вы можете, скажем, int[] x = { 1, 2, 3 };
в объявлении с инициализатором, но не позже x = { 4, 5, 6 };
в присваивании.