Пре- и постинкремент в 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 +=
оценивается так:
Так
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?