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

你能向我解释这个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 = 5; i=++a + ++a + a++; => i=6 + 7 + 7; (a=8) a = 5; i=a++ + ++a + ++a; => i=5 + 7 + 8; (a=8) 

++a递增,然后使用variables。
a++使用然后递增variables。

如果你有

 a = 1; 

而你呢

 System.out.println(a++); //You will see 1 //Now a is 2 System.out.println(++a); //You will see 3 

@codaddict解释你的特定片段。

 i = ++a + ++a + a++; 

 i = 6 + 7 + 7 

工作 :将a递增到6(当前值6)+递增a到7(当前值7)。 总和为13,现在将其添加到当前值(= 7),然后将a递增到8.总和为20,分配完成后的值为8。

 i = a++ + ++a + ++a; 

 i = 5 + 7 + 8 

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

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

与你的expression相关:

 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 

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

在上面的例子中

 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 

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

++一个

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

A ++

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

a是5时, a++给出expression式5,然后递增a ,而++a a在将数字传递给expression式(在这种情况下给出expression式6)之前递增a

所以你计算

 i = 6 + 7 + 7 i = 5 + 7 + 8 

但是我相信,如果你把所有的语句结合起来,并运行在Java 8.1中,你将得到一个不同的答案,至less这就是我的经验所说的。

代码将如下工作:

 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是前缀增量运算符:

  • 结果先计算并存储,
  • 那么使用variables。

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

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

一旦你记得规则,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) 

所以我是6 + 7 + 7 = 20,所以20是打印。

 i = (5, a is now 6) + (7, a is now 8) + (8, a is now 9) 

所以我是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被打印最后的时间。

如果不是在expression式中,则前增量和后增量是等效的

 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 
 a=5; i=++a + ++a + a++; 

 i = 7 + 6 + 7 

工作:前/后增量具有“从右到左”的关联性,而前有优先级,因此首先预增量将被解为(++a + ++a) => 7 + 6 。 那么提供a=7来提升增量=> 7 + 6 + 7 =20a =8

 a=5; i=a++ + ++a + ++a; 

 i=7 + 7 + 6 

工作:前/后增量具有“从右到左”的关联性,并且前置优先于后置,所以首先预先增量将被解为(++a + ++a) => 7 + 6 ,然后a=7提供后增量=> 7 + 7 + 6 =20a =8

我相信你正在执行所有这些陈述的不同
一起执行将导致=> 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) 

只要提到这些原则和形象,你会在几分钟内成为亲。

原理:-

1.)当一元运算符++和 – 用于前缀表示法时,variables的值在expression式中使用variables之前递增/递减。

2.)当一元运算符++和 – 用于后缀表示法时,variables的值在expression式中使用variables之后递增/递减。

示例: – 图像中expression式的评估从左到右。 假设一个是10。

后缀和前缀表达式的评估

 Your Question:- int a = 5, i; i = ++a + ++a + a++; i = a++ + ++a + ++a; a = ++a + ++a + a++; System.out.println(a); System.out.println(i); Answer:- i = 6 + 7 + 7; [a = 8] i = 8 + 10 + 11; a = 12 + 13 + 13; [a = 14] O/P :- 38 29