增量后(i++)和增量前(++i)操作符在java中是如何工作的?

fcg9iug3  于 2021-08-25  发布在  Java
关注(0)|答案(14)|浏览(509)

你能给我解释一下这个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

qaxu7uf2

qaxu7uf21#

这有用吗?

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++ 也会增加值(在后台),但会返回未更改的变量值-看起来它会在以后执行。

vlju58qv

vlju58qv2#

++a 递增,然后使用变量。 a++ 使用并递增变量。
如果你有

a = 1;

你呢

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

//Now a is 2

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

codaddict解释了您的特定片段。

nbewdwxp

nbewdwxp3#

在这两种情况下,它首先计算值,但在增量后,它保留旧值,并在计算后返回
a
a=a+1;
返回a;
a

温度=a;
a=a+1;
返回温度;

iecba09b

iecba09b4#

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

i = 6 + 7 + 7

工作:增量a至6(当前值6)+增量a至7(当前值7)。现在求和为13,将其与a(=7)的当前值相加,然后将a增加到8。求和为20,赋值完成后a的值为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。

ubbxdtey

ubbxdtey5#

++a 增量 a 在评估之前。 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隐式使用的。如果你用这种方式看这些术语,你可以很容易地看到,它们都是相同的,因为它们是可交换的。

gcxthw6b

gcxthw6b6#

在上面的例子中

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
ctzwtxfj

ctzwtxfj7#

是前缀增量运算符:
首先计算并存储结果,
然后使用变量。
a
是后缀增量运算符:
首先使用变量,
然后计算并存储结果。
一旦你记住了规则,ez会让你计算一切!

ttp71kqs

ttp71kqs8#

但是,我相信,如果您将所有语句组合在一起,并在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
ttcibm8c

ttcibm8c9#

假设你是说

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。

5gfr0r5j

5gfr0r5j10#

什么时候 a 那是五点 a++ 为表达式和增量指定5 a 后来 ++a 增量 a 在将数字传递给表达式(该表达式给出 a 6)在本例中的表达式)。
那么你算

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

olqngx5911#

pre increment表示变量在表达式中求值之前先递增。后增量是指变量在表达式中使用时经过求值后递增。
因此,仔细看,你会发现这三个赋值在算术上是等价的。

kuarbcqp

kuarbcqp12#

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

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
vc6uscn9

vc6uscn913#

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 .

hc2pp10m

hc2pp10m14#

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

相关问题