Показать сообщение отдельно
Непрочитано 20.01.2013, 12:48   #4
Аватар для Lihoy
Герой

По умолчанию Re: инкременты и декременты в java

Цитата:
Сообщение от niko42 Посмотреть сообщение
Спасибо. Как бы это действие понятно: --a + a * ++a переведем 1 +1*2
Интересует следующие действие: + a++ +a++
После "--a + a * ++a" значение а составляло 2.
Теперь переходим к "a++ + a++".

а++ = 2 (т.к. постфиксный инкремент, мы сначала вернули значение а, которое равно 2, затем увеличили а на 1. Таким образом, сейчас значение а составляет 3)

a++ = 3 (т.к. постфиксный инкремент, мы сначала вернули значение а, которое равно 3, затем увеличили а на 1. Таким образом, сейчас значение а составляет 4, которое, к слову, далее нигде уже в расчете принимать участие не будет).

В итоге:
a = 2 + 1 + 1*2 + 2 + 3 = 10

UPD.
Цитата:
Если более детально.
То не пойму логики
int a= 2;
a = a++;
а == 2

int a= 2;
a = a++ + a++;
а == 5
Почему первая операция без изменений, а вторая изменяет.
Потому, что в первом случае:
1. мы вернули значение 2
2. увеличили а на 1 (в памяти оно стало 3)
3. но потом значению а было присвоено значение 2 (которое мы вернули ранее).

Во втором же случае:
1. мы для первого слагаемого (а++) вернули значение 2
2. увеличили значение а на 1 (в памяти оно стало 3)
3. для второго слагаемого (а++) вернули значение 3 (т.к. ранее увеличили а на 1)
4. опять увеличили значение а на 1 (в памяти оно стало 4)
5. но в итоге, присвоили значению а (которое в памяти 4) значение суммы 2 + 3 = 5.
Lihoy вне форума Отправить сообщение для Lihoy с помощью ICQ Ответить с цитированием
Сказали спасибо: