Не понимаю логику вычисления

Я столкнулся с недопониманием логики вычисления в java. Есть такое выражене

    int i = 0;
    int u = 2;

    i += 3 + u--;

Результат = 5. Вопрос: Почему 5, если i = 0 + 3 + (2-1) == 4.

Другой вопрос по вычеслению, есть цикл:

    int i = 0;
    int u = 2;

    for (i = 2; i++ < 12; i += 3 + u--) {
        u += i;
    }

    System.out.println(u);

Результат = 15. Почему 15?

Буду очень благодарен, кто объяснит.

С уважением.


Ответы (2 шт):

Автор решения: Igor

var i = 0;
var u = 2;

for (i = 2; 
    (console.log(`i before loop check = ${i}`) || i++ < 12) && !console.log(`i after  loop check = ${i}`); 
    i += 3 + u--) {
  u += i;
  console.log(`i = ${i}, u = ${u}`);
}

console.log("Final u =", u);

→ Ссылка
Автор решения: roddar92

Потому что при постфиксном инкременте/дикременте переменной u новое значения присваивается в последнюю очередь, то есть после того, как мы прибавили u к выражению.

Как работает унарный плюс, с унарным минусом логика така же:

int a = i++; <=> int a = i; i = i + 1;

Есть ещё и префиксный инкремент: ++u:

int a = ++i; <=> i = i + 1; int a = i;
→ Ссылка