Запутался, как присвоить значение в индексе другому значению в индексе другому значению в индексе из списка - PullRequest
0 голосов
/ 19 сентября 2018

Скажем, код:

int[] a = {0,1,2,3};
        a[0]=a[2]=a[1];
        for(int i=0; i<a.length; i++) {
            System.out.print(a[i]+ " ");
        }

Почему он печатает "1 1 1 3", а не "2 1 1 3"?

Заранее спасибо.

1 Ответ

0 голосов
/ 19 сентября 2018

Когда в одном операторе происходит несколько назначений, эти назначения имеют право-ассоциативность.Это означает, что

a[0]=a[2]=a[1];

имеет то же значение, что и:

a[0]=(a[2]=a[1]);

JLS Раздел 15.26 детали :

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

Во время выполнения результатВыражение присваивания - это значение переменной после присвоения.

Итак, конечным результатом одного присваивания является присвоенное значение.Это означает, что:

  1. Значение a[1] присваивается a[2], что составляет 1.Это значение выражения a[2]=a[1].
  2. Значение из шага (1), 1, присваивается a[0].

Если вы хотите значениес a[2] для присвоения a[0] перед копированием значения с a[1] на a[2], затем вы должны разбить их на отдельные операторы.

a[0]=a[2];
a[2]=a[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...