Jak działają operatory post increment (i++) i pre increment (++i) w Javie?

Czy możesz mi wyjaśnić wyjście tego kodu Javy?

int a=5,i;

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

System.out.println(a);
System.out.println(i);

Wyjście jest 20 w obu przypadkach

Author: Pokechu22, 2010-03-03

14 answers

Czy to pomaga?

a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)

a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)

Najważniejsze jest to, że ++a zwiększa wartość i natychmiast ją zwraca.

a++ również zwiększa wartość (w tle), ale zwraca niezmienioną wartość zmiennej - co wygląda na to, że zostanie wykonana później.

 160
Author: kgiannakakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-17 12:03:07

++a przyrosty, a następnie używa zmiennej.
a++ Używa, a następnie zwiększa zmienną.

Jeśli masz

a = 1;

I robisz

System.out.println(a++); //You will see 1

//Now a is 2

System.out.println(++a); //You will see 3

Codaddict wyjaśnia twój konkretny fragment.

 213
Author: Lombo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-14 22:11:07

W obu przypadkach najpierw oblicza wartość, ale po inkrementacji zachowuje starą wartość i po obliczeniu zwraca ją

++a

  1. a = a + 1;
  2. return a;

A++

  1. temp = a;
  2. a = a + 1;
  3. return temp;
 68
Author: Tigran Babajanyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 05:10:19
i = ++a + ++a + a++;

Jest

i = 6 + 7 + 7

Praca : przyrost a do 6 (aktualna wartość 6) + przyrost a do 7 (aktualna wartość 7). Suma wynosi 13 Teraz dodaj ją do bieżącej wartości a (=7), a następnie zwiększ a do 8. Suma wynosi 20, a wartość a po zakończeniu zadania wynosi 8.

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

Jest

i = 5 + 7 + 8

Working: na początku wartość a wynosi 5. Użyj go w dodatku, a następnie zwiększ do 6 (bieżąca wartość 6). Zwiększ a z bieżącej wartości 6 do 7, aby uzyskać inny argument+. Suma wynosi 12 a aktualna wartość a to 7. Następny przyrost a od 7 do 8 (aktualna wartość = 8) i dodać go do poprzedniej sumy 12, aby uzyskać 20.

 22
Author: codaddict,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 02:47:19

++a przyrosty a przed jego oceną. a++ ocenia a, a następnie ją zwiększa.

Związane z wyrażeniem podanym:

i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end

Nawiasy, których użyłem powyżej, są domyślnie używane przez Javę. Jeśli spojrzysz na terminy w ten sposób, łatwo zobaczysz, że są one takie same, jak są przemienne.

 10
Author: Aurril,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 11:56:22

W powyższym przykładzie

int a = 5,i;

i=++a + ++a + a++;        //Ans: i = 6 + 7 + 7 = 20 then a = 8 

i=a++ + ++a + ++a;        //Ans: i = 8 + 10 + 11 = 29 then a = 11

a=++a + ++a + a++;        //Ans: a = 12 + 13 + 13 = 38

System.out.println(a);    //Ans: a = 38

System.out.println(i);    //Ans: i = 29
 8
Author: vinod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-14 19:06:45

++a jest operatorem przyrostkowym:

  • wynik jest obliczany i zapisywany jako pierwszy,
  • wtedy zostanie użyta zmienna.

A++ jest operatorem przyrostowym postfixa:

  • zmienna jest używana jako pierwsza,
  • następnie wynik jest obliczany i zapisywany.

Gdy przypomnisz sobie zasady, EZ dla ciebie, aby obliczyć wszystko!

 5
Author: Xinyi Liu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-29 16:02:46

Zakładając, że miałeś na myśli

int a=5; int i;

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

System.out.println(i);

a=5;

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

System.out.println(i);

a=5;

a=++a + ++a + a++;

System.out.println(a);

Ocenia się na:

i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)

Więc jestem 6 + 7 + 7 = 20 i tak drukuje się 20.

i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)

Więc jestem 5 + 7 + 8 = 20 i tak 20 jest ponownie wydrukowane.

a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)

I po obliczeniu całej prawej Strony (łącznie z ustawieniem a na 8), a jest ustawione na 6 + 7 + 7 = 20 i tak 20 jest drukowane po raz ostatni.

 4
Author: user93199,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-18 16:16:57

Gdy a jest 5, to a++ daje 5 do wyrażenia, a następnie zwiększa a, podczas gdy ++a zwiększa a przed przekazaniem liczby do wyrażenia (co daje a 6 do wyrażenia w tym przypadku).

Więc Oblicz

i = 6 + 7 + 7
i = 5 + 7 + 8
 3
Author: Thorbjørn Ravn Andersen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 11:51:35

Wierzę jednak, że jeśli połączysz wszystkie swoje wypowiedzi i uruchomisz je w Javie 8.1, otrzymasz inną odpowiedź, przynajmniej tak mówi moje doświadczenie.

Kod będzie działał tak:

int a=5,i;

i=++a + ++a + a++;            /*a = 5;
                                i=++a + ++a + a++; =>
                                i=6 + 7 + 7; (a=8); i=20;*/

i=a++ + ++a + ++a;           /*a = 5;
                                i=a++ + ++a + ++a; =>
                                i=8 + 10 + 11; (a=11); i=29;*/

a=++a + ++a + a++;            /*a=5;
                                a=++a + ++a + a++; =>
                                a=12 + 13 + 13;  a=38;*/

System.out.println(a);        //output: 38
System.out.println(i);         //output: 29
 3
Author: Rishabh Vashishtha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-15 19:15:25

Pre-increment oznacza, że zmienna jest inkrementowana przed jej obliczeniem w wyrażeniu. Post-increment oznacza, że zmienna jest zwiększana po tym, jak zostanie obliczona do użycia w wyrażeniu.

Dlatego, przyjrzyj się uważnie, a zobaczysz, że wszystkie trzy zadania są arytmetycznie równoważne.

 3
Author: Oke Uwechue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-04 19:03:46

Pre-increment i post increment są równoważne, jeśli nie w wyrażeniu

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
 2
Author: Java Main,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-12 20:16:39
a=5; i=++a + ++a + a++;

Jest

i = 7 + 6 + 7

Działa: pre / post increment ma Asocjację "od prawej do lewej", a pre ma pierwszeństwo przed postem, więc przede wszystkim Pre increment zostanie rozwiązany jako (++a + ++a) => 7 + 6. następnie a=7 podaje się post increment = > 7 + 6 + 7 =20 i a =8.

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

Jest

i=7 + 7 + 6

Działa: pre / post increment ma Asocjację "od prawej do lewej", a pre ma pierwszeństwo przed postem, więc przede wszystkim Pre increment zostanie rozwiązany jako (++a + ++a) => 7 + 6.następnie a=7 jest dostarczane do Post increment = > 7 + 7 + 6 =20 i a =8.

 0
Author: Vineet Sahu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-12 15:35:41

Wierzę, że wykonujesz wszystkie te stwierdzenia inaczej
wykonanie razem spowoduje => 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
Author: Randhawa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-23 23:01:39