Не могли бы вы объяснить мне вывод этого Java-кода?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
Выход 20 в обоих случаях
java
post-increment
pre-increment
Анкит Сачан
источник
источник
Ответы:
Это помогает?
Главное, что
++a
увеличивает значение и сразу возвращает его.a++
также увеличивает значение (в фоновом режиме), но возвращает неизменное значение переменной - похоже, что это выполняется позже.источник
int a = 1; int b = a++; int c = ++b;
Ожидал, что b будет равно 1, поскольку это инкремент сообщения.++a
увеличивает, а затем использует переменную.a++
использует, а затем увеличивает значение переменной.Если у вас есть
а ты делаешь
codaddict объясняет ваш конкретный фрагмент.
источник
В обоих случаях он сначала вычисляет значение, но при постинкременте сохраняет старое значение и после вычисления возвращает его.
++ а
а ++
источник
является
Работа : увеличить a до 6 (текущее значение 6) + увеличить a до 7 (текущее значение 7). Сумма равна 13, теперь прибавьте ее к текущему значению a (= 7), а затем увеличьте a до 8. Сумма равна 20, а значение a после завершения присваивания равно 8.
является
Работа : Начальное значение a равно 5. Используйте его в сложении, а затем увеличьте до 6 (текущее значение 6). Увеличьте a от текущего значения 6 до 7, чтобы получить другой операнд +. Сумма равна 12, а текущее значение a - 7. Затем увеличьте a от 7 до 8 (текущее значение = 8) и добавьте его к предыдущей сумме 12, чтобы получить 20.
источник
++a
увеличиваетсяa
до его оценки.a++
оценивает,a
а затем увеличивает его.Относительно вашего выражения:
Парентезы, которые я использовал выше, неявно используются Java. Если вы посмотрите на термины с этой точки зрения, вы легко увидите, что они оба такие же, как и коммутативные.
источник
В приведенном выше примере
источник
++ a - оператор приращения префикса:
a ++ - оператор постфиксного приращения:
Как только вы запомните правила, EZ для вас, чтобы все рассчитать!
источник
Предполагая, что вы имели в виду
Это оценивается как:
поэтому i равно 6 + 7 + 7 = 20, поэтому печатается 20.
поэтому i равно 5 + 7 + 8 = 20, и поэтому снова печатается 20.
и после того, как вся правая часть оценена (включая установку a на 8), THEN a устанавливается на 6 + 7 + 7 = 20, и поэтому 20 печатается в последний раз.
источник
когда
a
равно 5, тоa++
выдает 5 выражению иa
затем увеличивает его , а затем++a
увеличиваетa
перед передачей числа в выражение (котороеa
в данном случае дает 6 выражению).Итак, вы рассчитываете
источник
Однако я считаю, что если вы объедините все свои утверждения и запустите их на Java 8.1, вы получите другой ответ, по крайней мере, так говорит мой опыт.
Код будет работать так:
источник
Предварительное приращение означает, что переменная увеличивается ДО того, как она оценивается в выражении. Постинкремент означает, что переменная увеличивается ПОСЛЕ того, как она была оценена для использования в выражении.
Поэтому посмотрите внимательно, и вы увидите, что все три назначения арифметически эквивалентны.
источник
пре-инкремент и пост-инкремент эквивалентны, если не в выражении
источник
является
Работа: пре / пост инкремент имеет ассоциативность "справа налево", а пре имеет приоритет над постом, поэтому в первую очередь пре-инкремент будет решен как
(++a + ++a) => 7 + 6
. thena=7
предоставляется для увеличения поста =>7 + 6 + 7 =20
иa =8
.является
Работа: пре / пост инкремент имеет ассоциативность «справа налево», а пре имеет приоритет над постом, поэтому в первую очередь будет
(++a + ++a) => 7 + 6
решено пре-инкремент, поскольку. Затемa=7
предоставляется пост инкремент =>7 + 7 + 6 =20
иa =8
.источник
Я считаю, что вы выполняете все эти операторы по-разному,
выполняя их вместе, вы получите => 38, 29
источник