增量后(i+;+;)和增量前(i+;+;i)操作符在Java中如何工作?
你能给我解释一下这个Java代码的输出吗增量后(i+;+;)和增量前(i+;+;i)操作符在Java中如何工作?,java,post-increment,pre-increment,Java,Post Increment,Pre 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); 在这两种情况下,在计算前,输出均为20。 a++计算a并将其递增 与您给出的表达式相关: i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
在这两种情况下,在计算前,输出均为20。
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
我上面使用的parentese是Java隐式使用的。如果你用这种方式看这些术语,你可以很容易地看到,它们都是相同的,因为它们是可交换的
i = ++a + ++a + a++;
是
工作:增量a到6(当前值6)+增量a到7(当前值7)。总和是13,现在将其与a(=7)的当前值相加,然后将a增加到8。总和为20,赋值完成后a的值为8
i = a++ + ++a + ++a;
是
工作:a的起始值为5。在加法中使用它,然后将其增加到6(当前值6)。将a从当前值6递增到7,以获得另一个+操作数。总和为12,a的当前值为7。下一步将a从7增加到8(当前值=8),并将其与前一个和12相加,得到20 这有帮助吗
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)
要点是++a
增加值并立即返回
a++
也会增加值(在后台),但会返回变量的未更改值-看起来它是稍后执行的 当a
为5时,则a++
给表达式一个5,然后递增a
,而++/a
在将数字传递给表达式之前递增a
(在这种情况下,给表达式一个a
6)
那么你算
i = 6 + 7 + 7
i = 5 + 7 + 8
++a
递增,然后使用变量。a++
使用变量,然后递增变量
如果你有
a = 1;
你呢
System.out.println(a++); //You will see 1
//Now a is 2
System.out.println(++a); //You will see 3
您的特定代码段。在上面的示例中
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
是
工作:前置/后置增量具有“从右到左”的关联性,并且前置优先于后置,因此首先前置增量将作为(++a++a)=>7+6
进行求解。然后将a=7
提供给post increment=>7+6+7=20
和a=8
a=5; i=a++ + ++a + ++a;
是
工作:前置/后置增量具有“从右到左”的关联性,并且前置优先于后置,因此首先将前置增量作为
(++a+++a)进行求解=>7+6
。然后提供a=7
以进行增量后置=>7+7+6=20
和a=8
如果不在表达式中,则增量前和增量后是等效的
a=5; i=a++ + ++a + ++a;
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
intj=0;
int r=0
对于(intv=0;v,我相信如果您将所有语句组合在一起并在Java8.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
++是前缀增量运算符:
- 首先计算并存储结果
- 然后使用变量
a++是后缀增量运算符:
- 首先使用变量
- 然后计算并存储结果
一旦你记住了规则,EZ会让你计算所有的事情!假设你的意思是
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);
其结果是:
i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
所以i是6+7+7=20,所以20被打印出来
i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)
所以我是5+7+8=20,所以20被再次打印
a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
在计算完所有右侧后(包括将a设置为8),然后将a设置为6+7+7=20,因此最后一次打印20。在这两种情况下,它首先计算值,但在增量后,它保留旧值,并在计算后返回值
++a
a=a+1
返回a
a++
温度=a
a=a+1
返回温度
我相信你执行这些陈述的方式不同
一起执行将导致=>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)
inta=5,i;
i=++a+++a+a++;
//这意味着i=6+7+7=20,当该结果存储在i中时,
//最后一个*a*将递增
i=a++++++a++a;
//这意味着i=5+7+8=20(这可能很复杂,
//但它是这样工作的),
a=++a+++a+a++;
//当a为6+7+7=20时(按如下方式递增)
递增前表示变量在表达式中求值之前递增。递增后表示变量在表达式中求值后递增
因此,仔细观察,你会发现所有三个赋值都是算术等价的。
总是避免歧义语句:)@ C++ Salurav不同于C和C++,java和C语言都有严格的定义的顺序,所以这些语句不含糊。我知道,但是这些语句不是(不能)。用于实际目的,因此必须避免。@PeteKirkham这已经过去六年了,但我仍然想指出,在这种情况下,“含糊不清”是含糊不清的——它可能意味着“编译器不知道放什么”,也可能意味着“程序员不知道它意味着什么”。你确定第二个中的a==9吗?I=++a++a++;=>i=7+8+5;(a=8)由于后增量具有最高优先级,首先执行一个++,复杂的例子容易解释。对于C和C++,这个答案是相同的吗?@丹尼斯<代码> B= A++<代码>导致<代码> B=1,A=2 < /代码>,然后<代码> C++B>代码>导致<代码> C=2,b=2
@klaslindbkäck可交换意味着可以交换两个表达式,但仍然得到相同的结果。所以a++++++++a==++a+a++(5+7==6+6;a==7结尾)。这些语句从右到左或从左到右都有效?最清晰的答案这是一个让我明白的答案。。谢谢。这是最简洁的回答+1
i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)
a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
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)