Пре- и постинкремент в Java

Я просто хотел создать небольшую Java-головоломку, но я озадачился. Одна часть головоломки:

Что делает следующий фрагмент кода:

public class test {
    public static void main(String[] args) {
        int i = 1;
        i += ++i + i++ + ++i;

        System.out.println("i = " + i);
    }
}

Выводит9.

My (at least partly) wrong explanation:

Я не совсем уверен, но думаю, что термин послеi += оценивается так:

enter image description here

Так

int i = 1;
i += ++i + i++ + ++i;

такой же как

int i = 1;
i += ((++i) + (i++)) + (++i);

Это оценивается слева направо (см.Предварительная и последующая оценка Java).

Первый++i приращенийi в2 и возвращается2, Так что у тебя есть:

i = 2;
i += (2 + (i++)) + (++i);

i++ возвращается2, так как это новое значениеiи приращенияi в3:

i = 3;
i += (2 + 2) + ++i;

Второй++i приращенийi в4 и возвращается4:

i = 4;
i += (2 + 2) + 4;

Таким образом, вы в конечном итоге12не9.

Where is the error in my explanation? What would be a correct explanation?

Ответы на вопрос(6)

Ваш ответ на вопрос