public static void main(String[] args) {
int num =0;
for (int i = 0; i < 100; i++)
num = num++;
System.out.println(num);
}
Решал тест на стороннем сайте, и никак не могу понять почему на выходе 0? Вроде как постфиксный оператор инкремента выполняет num = num + 1;
Однако если написать num++ в System.out.println, результат будет 0, 1, 2, 3, 4... 99.
При это если написать num = num + 1, вместо num = num++, в ответе будет 100 ))
разве num++ не эквивалентно num = num + 1 ?Anonymous #3232154
37 уровень
Постфиксный оператор инкремента
Обсуждается
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Varava VyacheslavFull Stack Developer в Nibiru Space Corp.
17 марта 2023, 08:02
Если "++" после числа, тогда при этой операции сначала берётся значение, а потом уже увеличивается.
В конструкции
порядок такой:
1. Справа от "=":
1.1. Взять значение sum
1.2. Увеличить значение sum
2. Записать в переменную слева от "=" значение из пункта 1.1.
Так как это та же переменная sum, её значение станет 0, после того, как оно инкрементируется.
+1
hidden #598481
17 марта 2023, 07:33
Просто num++, а не num = num++.
0
Method
16 марта 2023, 15:55
Постфикс сначала присваивает значение потом меняет переменную.
0
Anonymous #3232154
16 марта 2023, 15:57
почему тогда 0 на выходе, если он должен присваивать значение и менять переменную?
0
Method
16 марта 2023, 19:51
рекомендую к ознакомлению :)
Stackoverflow
0
Anonymous #3232154
16 марта 2023, 21:08
к счастью, я понимаю как это работает в его ситуации (видимо неправильно понимаю), я не понимаю как это работает в цикле. Если придерживаться логике, которая описывается на большинстве ресурсах о постфиксах и префиксах, то станет ясно, что в случае постфикса сначала используется старое значение переменной, а только потом увеличиваем переменную на единицу. Но в случае с циклом мы проходимся по переменной 100 раз!!! Почему при этом ни разу не увеличиваем переменную на единицу? Ведь со второй итерации цикла должно использоваться уже новое значение переменной num, а вместо этого постфиксный инкремент просто игнорируется...
0
Method
16 марта 2023, 22:42
Действительно хороший вопрос однако:)
Stackoverflow
0
Method
16 марта 2023, 22:49
В двух словах, num++ увеличивает переменную но возвращает старое значение, которые ты опять присваиваешь num и ничего не меняется. Если просто писать num++ он будет увеличивать переменную. Либо получается надо писать ++num он и увеличивает и возвращает новое значение.
Блин сам для себя, посмотрел на это под другим углом)
0
Method
16 марта 2023, 15:43
4 варианта:
num = num + 1;
num += 1;
num++;
++num;
0
Anonymous #3232154
16 марта 2023, 15:46
?
0