Как работают постинкрементные (i ++) и преинкрементные (++ i) операторы в Java? - PullRequest
81 голосов
/ 03 марта 2010

Можете ли вы объяснить мне вывод этого кода 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

Ответы [ 14 ]

1 голос
/ 03 марта 2010

, когда a равно 5, тогда a++ дает 5 выражению и затем увеличивает a, тогда как ++a увеличивает a перед передачей числа в выражение (что дает a 6 для выражение в этом случае).

Итак, вы рассчитываете

i = 6 + 7 + 7
i = 5 + 7 + 8
0 голосов
/ 24 октября 2017

Я считаю, что вы выполняете все эти заявления по-разному
выполнение вместе приведет к => 38, 29

int a=5,i;
i=++a + ++a + a++;
//this means i= 6+7+7=20 and when this result is stored in i,
//then last *a* will be incremented <br>
i=a++ + ++a + ++a;
//this means i= 5+7+8=20 (this could be complicated, 
//but its working like this),<br>
a=++a + ++a + a++;
//as a is 6+7+7=20 (this is incremented like this)
0 голосов
/ 12 июня 2016

перед приращением и после приращения эквивалентны, если не в выражении

int j =0;
int r=0         
for(int v = 0; v<10; ++v) { 
          ++r;
          j++;
          System.out.println(j+" "+r);
  }  
 1 1  
 2 2  
 3 3       
 4 4
 5 5
 6 6
 7 7
 8 8
 9 9
10 10
0 голосов
/ 30 октября 2015
a=5; i=++a + ++a + a++;

есть

i = 7 + 6 + 7

Рабочая: пре / постинкремент имеет ассоциативность «справа налево», и пре имеет приоритет над постом, поэтому в первую очередь преинкремент будет решен как (++a + ++a) => 7 + 6. затем a=7 предоставляется для публикации приращения => 7 + 6 + 7 =20 и a =8.

a=5; i=a++ + ++a + ++a;

есть

i=7 + 7 + 6

Рабочая: пре / постинкремент имеет ассоциативность «справа налево», и пре имеет приоритет над постом, поэтому в первую очередь преинкремент будет решен, так как (++a + ++a) => 7 + 6 .then a=7 предоставляется для постинкремента => 7 + 7 + 6 =20 и a =8.

...