后增量(i ++)和预增量(++ i)运算符如何在Java中工作?

Ank*_*han 88 java pre-increment post-increment

你能解释一下这个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);
Run Code Online (Sandbox Code Playgroud)

两种情况下的输出均为20

Lom*_*mbo 186

++a增量然后使用变量.
a++使用然后递增变量.

如果你有

a = 1;
Run Code Online (Sandbox Code Playgroud)

你也是

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

//Now a is 2

System.out.println(++a); //You will see 3
Run Code Online (Sandbox Code Playgroud)

codaddict解释了你的特定片段.

  • 我认为一个不那么令人困惑的词应该是“评估”,而不是“使用”。 (2认同)

kgi*_*kis 136

这有帮助吗?

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

a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)
Run Code Online (Sandbox Code Playgroud)

重点是++a增加值并立即返回它.

a++ 也会增加值(在后台)但返回变量的未更改值 - 看起来稍后会执行.

  • 你确定第二个= = 9吗? (5认同)
  • 易于解释的复杂示例。 (2认同)

Tig*_*yan 52

在这两种情况下,它首先计算值,但在后增量中它保持旧值,并在计算后返回它

++一个

  1. a = a + 1;
  2. 返回;

A ++

  1. temp = a;
  2. a = a + 1;
  3. 回温;

  • 最清楚的答案 (7认同)
  • 这是让我理解清楚的...谢谢. (2认同)

cod*_*ict 19

i = ++a + ++a + a++;
Run Code Online (Sandbox Code Playgroud)

i = 6 + 7 + 7
Run Code Online (Sandbox Code Playgroud)

工作:将a增加到6(当前值6)+增量a到7(当前值7).Sum为13,现在将其添加到a(= 7)的当前值,然后将a增加到8. Sum为20,赋值完成后的a值为8.

i = a++ + ++a + ++a;
Run Code Online (Sandbox Code Playgroud)

i = 5 + 7 + 8
Run Code Online (Sandbox Code Playgroud)

工作:在a的起始值为5.在添加中使用它,然后将其增加到6(当前值6).将当前值6增加到7以获得+的其他操作数.Sum为12,a的当前值为7.接下来将a从7增加到8(当前值= 8)并将其加到前一个和12得到20.


Aur*_*ril 9

++aa在评估之前递增. a++评估a然后递增它.

与您的表达相关:

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
Run Code Online (Sandbox Code Playgroud)

我上面使用的parenteses被Java隐式使用.如果你以这种方式看待这些术语,你可以很容易地看到,它们都是相同的,因为它们是可交换的.


小智 8

在上面的例子中

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
Run Code Online (Sandbox Code Playgroud)


小智 6

但我相信,如果您将所有语句组合起来并在 Java 8.1 中运行它,您将得到不同的答案,至少我的经验是这样的。

代码将像这样工作:

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
Run Code Online (Sandbox Code Playgroud)


小智 5

++ a是前缀增量运算符:

  • 首先计算并存储结果,
  • 然后使用该变量。

a ++是后缀增量运算符:

  • 首先使用变量,
  • 然后计算结果并存储。

记住规则后,EZ for ya即可计算一切!