, который в порядке, указанном в скобках, должен быть рассчитан первым
Нет.Это распространенное заблуждение, что круглые скобки оказывают (общее) влияние на порядок расчета или оценки.Они только приводят части вашего выражения в определенное дерево, связывая правильные операнды с правильными операциями для задания.
(И, если вы их не используете, эта информация поступает из «приоритета»)и ассоциативность операторов, что является результатом того, как определяется синтаксическое дерево языка. На самом деле, это все еще именно так, как это работает, когда вы используете скобки, но мы упрощаем и говорим, что тогда мы не полагаемся ни на какие правила предшествования.)
Как только это будет сделано (т.е. когда ваш код будет проанализирован в программе), эти операнды все еще должны быть оценены, и существуют отдельные правила о том, как это делается: упомянутые правила (как показал нам Эндрю).) утверждают, что LHS каждой операции сначала оценивается в Java.
Обратите внимание, что это не так во всех языках;например, в C ++, если вы не используете оператор короткого замыкания, такой как &&
или ||
, порядок вычисления операндов обычно не определен, и вы не должны полагаться на него в любом случае.
Учителя должны прекратить объяснять приоритет оператора, используя вводящие в заблуждение фразы, такие как «это делает сложение первым».С учетом выражения x * y + z
правильное объяснение будет следующим: «приоритет оператора заставляет сложение происходить между x * y
и z
, а не между y
и z
», без упоминания какого-либо «порядка».