Как и когда использовать «async» и «await»

a[b] = b = 0;

1) оператор индексирования массива имеет более высокий приоритет, чем оператор присваивания (см. этот ответ ):

(a[b]) = b = 0;

2) Согласно 15.26. Операторы присваивания JLS

Существует 12 операторов присваивания; все они синтаксически правые ассоциативные (они группируются справа налево). Таким образом, a = b = c означает a = (b = c), который присваивает значение c в b, а затем присваивает значение b a.

blockquote>
(a[b]) = (b=0);

3) Согласно 15.7. Порядок оценки JLS

Язык программирования Java гарантирует, что операнды операторов, по-видимому, оцениваются в определенном порядке оценки, а именно слева направо.

blockquote>

и

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

blockquote>

Итак:

a) (a[b]) сначала оценивается по a[1]

b), тогда (b=0) оценивается как 0

c) (a[1] = 0), оцененный последним

916
задан Roy 28 September 2018 в 20:12
поделиться