Java: prefix / postfix operatorów increment/decrement?
Z poniższego programu lub tutaj , Dlaczego ostatnie wywołanie System.out.println(i)
wyświetla wartość 7
?
class PrePostDemo {
public static void main(String[] args){
int i = 3;
i++;
System.out.println(i); // "4"
++i;
System.out.println(i); // "5"
System.out.println(++i); // "6"
System.out.println(i++); // "6"
System.out.println(i); // "7"
}
}
9 answers
i = 5;
System.out.println(++i); //6
To wypisuje "6", ponieważ trzeba dodać jeden do niego i zwraca wartość. 5+1=6; jest to prefiks, dodawanie do liczby przed użyciem jej w operacji.
i = 6;
System.out.println(i++); //6 (i = 7, prints 6)
To wyświetla "6", ponieważ zajmuje i, przechowuje kopię, dodaje 1 i zwraca kopię. Więc otrzymujesz wartość, którą byłem, ale także zwiększasz ją w tym samym czasie. Dlatego drukujesz starą wartość, ale jest ona zwiększana. Piękny Postfix przyrost.
Następnie, kiedy wydrukować i, to pokazuje prawdziwa wartość i, ponieważ została zwiększona. 7
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
2011-03-24 10:29:56
Wiem, że to zostało już wyjaśnione, ale pomyślałem, że inne wyjaśnienie może być pomocne.
Innym sposobem na zilustrowanie tego jest:
++i
da wynik new i
, i++
poda wynik oryginalnego i
i zapisze new i
do następnej akcji.
i
, zależy to od tego, czy i
została zmieniona w wyrażeniu, czy po ekspresja.
int i = 1;
result i = ++i * 2 // result = 4, i = 2
i
jest oceniany (zmieniany) przed obliczeniem wyniku. Drukowanie i
dla tego wyrażenia pokazuje zmienioną wartość i
użytą dla tego wyrażenia.
result i = i++ * 2 // result = 2, i = 2
i
jest oceniany po wyniku w obliczeniu. Tak więc Wydruk {[7] } z tego wyrażenia daje oryginalną wartość i
użytą w tym wyrażeniu, ale i
jest nadal zmieniany dla dalszych zastosowań. Tak więc wydrukowanie wartości i
zaraz po wyrażeniu pokaże nowy wartość przyrostowa i
. Ponieważ wartość i
zmieniła się, niezależnie od tego, czy jest drukowana, czy używana.
result i = i++ * 2 // result = 2, i = 2
System.out.println(i); // 2
Jeśli zachowałeś spójny wzorzec i uwzględniłeś linie wydruku dla wszystkich wartości:
int i = 3;
System.out.println(i); // 3
System.out.println(i++); // 3
System.out.println(i); // "4"
System.out.println(++i); // 5
System.out.println(i); // "5"
System.out.println(++i); // "6"
System.out.println(i++); // "6"
System.out.println(i); // "7"
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-11-18 06:30:50
Pomyśl o ++i
i i++
jako podobnych do i = i+1.
, chociaż nie jest to to samo. Różnica polega na tym, kiedy rzeczywiście i
zostanie przypisana z nowym przyrostem.
W ++i
przyrost następuje natychmiast.
Ale jeśli i++
jest tam przyrost nastąpi, gdy program przejdzie do następnej linii.
Spójrz na kod tutaj.
int i = 0;
while(i < 10){
System.out.println(i);
i = increment(i);
}
private int increment(i){
return i++;
}
Spowoduje to niekończącą się pętlę . ponieważ i zostanie zwrócona z oryginalną wartością i po średniku i zostanie zwiększona, ale zwrócona wartość nie było. W związku z tym nigdy nie będzie rzeczywiście zwrócony jako wartość przyrostową.
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:21:23
Dlaczego zmienna nie została zaktualizowana?
- Postfix: przekazuje bieżącą wartość i do funkcji, a następnie ją zwiększa.
- Prefix: zwiększa bieżącą wartość i przekazuje ją do funkcji.
Zauważ, że dotyczy to również Zadań:
i = 0;
test = ++i; // 1
test2 = i++; // 1
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
2011-03-24 01:09:11
System.out.println(i++); // "6"
To wysyła println
wartość, którą miałem przed tą linią kodu (6), a następnie zwiększa I (do 7).
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:21:47
Drukuje 7 dla ostatniego twierdzenia, bo w powyższym twierdzeniu jego wartość jest 6 po wydrukowaniu ostatniej instrukcji
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-02-12 20:51:09
Pomyśl o tym w kategoriach zmiennych tymczasowych.
i =3 ;
i ++ ; // is equivalent to: temp = i++; and so , temp = 3 and then "i" will increment and become i = 4;
System.out.println(i); // will print 4
Teraz,
i=3;
System.out.println(i++);
Jest równoważne
temp = i++; // temp will assume value of current "i", after which "i" will increment and become i= 4
System.out.println(temp); //we're printing temp and not "i"
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-05-25 04:05:09
Może w tym przykładzie zrozumiesz lepiej prefiks/postfix.
public class TestPrefixPostFix
{
public static void main (String[] args)
{
int x=10;
System.out.println( (x++ % 2 == 0)?"yes "+ x: " no "+x);
x=10;
System.out.println( (++x % 2 == 0)?"yes "+ x: " no "+x);
}
}
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-03-11 16:44:31
To moja odpowiedź. Niektórym z Was może okazać się to łatwe do zrozumienia.
package package02;
public class C11PostfixAndPrefix {
public static void main(String[] args) {
// In this program, we will use the value of x for understanding prefix
// and the value of y for understaning postfix.
// Let's see how it works.
int x = 5;
int y = 5;
Line 13: System.out.println(++x); // 6 This is prefixing. 1 is added before x is used.
Line 14: System.out.println(y++); // 5 This is postfixing. y is used first and 1 is added.
System.out.println("---------- just for differentiating");
System.out.println(x); // 6 In prefixing, the value is same as before {See line 13}
System.out.println(y); // 6 In postfixing, the value increases by 1 {See line 14}
// Conclusion: In prefixing (++x), the value of x gets increased first and the used
// in an operation. While, in postfixing (y++), the value is used first and changed by
// adding the number.
}
}
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-04 00:54:06