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解释了你的特定片段.
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++ 也会增加值(在后台)但返回变量的未更改值 - 看起来稍后会执行.
Tig*_*yan 52
在这两种情况下,它首先计算值,但在后增量中它保持旧值,并在计算后返回它
++一个
A ++
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.
++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)
| 归档时间: |
|
| 查看次数: |
289328 次 |
| 最近记录: |