Czy możesz mi wyjaśnić wynik działania tego kodu 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);
W obu przypadkach wynik wynosi 20
java
post-increment
pre-increment
Ankit Sachan
źródło
źródło
Odpowiedzi:
czy to pomaga?
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 - to, co wygląda na to, jest wykonywane później.źródło
int a = 1; int b = a++; int c = ++b;
Spodziewałem się, że b będzie równe 1, ponieważ jest to przyrost postu.++a
zwiększa, a następnie używa zmiennej.a++
używa, a następnie zwiększa zmienną.Jeśli masz
i ty to robisz
codaddict wyjaśnia Twój konkretny fragment.
źródło
W obu przypadkach najpierw oblicza wartość, ale po inkrementacji zachowuje starą wartość i po obliczeniu zwraca ją
++ a
a ++
źródło
jest
Praca : przyrost od a do 6 (aktualna wartość 6) + przyrost od 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 przypisywania wynosi 8.
jest
Praca : Na początku wartość a wynosi 5. Użyj jej do dodawania, a następnie zwiększ ją do 6 (aktualna wartość 6). Zwiększ wartość z bieżącej wartości 6 do 7, aby uzyskać inny operand +. Suma wynosi 12, a bieżąca wartość a to 7. Następnie zwiększaj a od 7 do 8 (aktualna wartość = 8) i dodaj ją do poprzedniej sumy 12, aby uzyskać 20.
źródło
++a
przyrostya
przed oceną.a++
ocenia,a
a następnie zwiększa go.Związane z podanym wyrażeniem:
Rodzice, których użyłem powyżej, są domyślnie używane przez Javę. Jeśli spojrzysz na te terminy w ten sposób, łatwo zobaczysz, że są one takie same, ponieważ są przemienne.
źródło
W powyższym przykładzie
źródło
++ a jest operatorem przyrostu przedrostka:
a ++ jest operatorem przyrostu przyrostka:
Kiedy już przypomnisz sobie zasady, EZ, aby wszystko obliczyć!
źródło
Zakładając, że miałeś na myśli
To daje:
więc i to 6 + 7 + 7 = 20, a więc 20 jest drukowane.
więc i wynosi 5 + 7 + 8 = 20, a więc 20 jest drukowane ponownie.
i po ocenie wszystkich prawych stron (łącznie z ustawieniem a na 8) WTEDY a jest ustawiane na 6 + 7 + 7 = 20 i tak 20 jest drukowane po raz ostatni.
źródło
kiedy
a
wynosi 5, toa++
daje 5 do wyrażenia i zwiększa sięa
później, podczas gdy++a
zwiększa sięa
przed przekazaniem liczby do wyrażenia (co dajea
6 wyrażeniu w tym przypadku).Więc kalkulujesz
źródło
Wierzę jednak, że jeśli połączysz wszystkie swoje stwierdzenia i uruchomisz je w Javie 8.1, otrzymasz inną odpowiedź, przynajmniej tak mówi moje doświadczenie.
Kod będzie działał następująco:
źródło
Pre-inkrementacja oznacza, że zmienna jest zwiększana PRZED jej oceną w wyrażeniu. Post-inkrementacja oznacza, że zmienna jest zwiększana PO tym, jak została oceniona pod kątem użycia w wyrażeniu.
Dlatego spójrz uważnie, a zobaczysz, że wszystkie trzy przypisania są arytmetycznie równoważne.
źródło
przed i po inkrementacji są równoważne, jeśli nie są w wyrażeniu
źródło
jest
Działająca: przed / po inkrementacja ma skojarzenie „od prawej do lewej” i pre ma pierwszeństwo przed postem, więc najpierw preinkrementacja zostanie rozwiązana jako
(++a + ++a) => 7 + 6
. następniea=7
jest dostarczany do postInkrementacja =>7 + 6 + 7 =20
ia =8
.jest
Działająca: przed / po inkrementacja ma skojarzenie "od prawej do lewej", a pre ma pierwszeństwo przed postem, więc najpierw zostanie rozwiązany
(++a + ++a) => 7 + 6
preinkrementacja, tak jak. Thena=7
jest dostarczany do postInkrementacja =>7 + 7 + 6 =20
ia =8
.źródło
Uważam, że wykonujesz wszystkie te instrukcje w różny sposób,
wykonanie razem da => 38, 29
źródło