繁体   English   中英

x + = ++ x相当于x = 2x + 1:为什么?

[英]x += ++x equivalent to x = 2x+1 : Why?

这个问题只是好奇心:我想知道x += ++x之后某些int x的值是什么?所以我试过了:

int x=10;
x+=++x;
System.out.println(x);

它打印出来:

21

在使用其他值进行一些测试后,它似乎等于x = 2x + 1。 为什么? 此行是否由编译器解释为字节操作? (顺便说一下,x + = x ++似乎等于x = 2x)。

我不认为这是我在项目中使用的东西,但我很想知道为什么我得到这个结果。

谢谢你的任何解释或提示

编辑:首先,感谢您的回答

我知道+=运算符是如何工作的,以及x++++x ,但由于某种原因,(完全逻辑和明显的)结果对我来说似乎很奇怪我应该已经考虑过了,抱歉你的时间!

它的计算方法是

  • 第1步:x = x + ++ x
  • 步骤2:变为x = 10 +(递增x)11

  • 第3步:最终结果存储在x即21中

这是证明:

我创建了一个MainClass如下:

public class MainClass{
public static void main(String...s){
int x = 10;
x += ++x;
}
}

然后使用javap -c MainClass检查字节码

  public static void main(java.lang.String...);
    Code:
       0: bipush        10     // push 10 onto stack
       2: istore_1             // store 10 in local variable 1
       3: iload_1              // load local variable 1 (now 10) back to stack
       4: iinc          1, 1   //increment local variable 1 by 1
       7: iload_1              // load local variable 1  (now 11) back to stack
       8: iadd                 // add top 2 variable on stack ( 10 and 11)
       9: istore_1             // store 21 to local variable 1
      10: return
}

它关于运算符优先级以及如何评估和使用++xx++ ++x ,值x被增量,然后用如此++x变为11和这个x += ++x变为21 ,其是10 + 11

但是, x++表示使用x ,然后其值递增

所以x+= x++意味着10 + 1020

int x=10;
x+=++x;
System.out.println(x);

x + = ++x在编译器中计算为x = x + ++x => x = 10 + ++x => x = 10 + 11 => x = 21

看这里:-

x+=++x; this expression will be executed like x=x+(x+1) so x = 10 + 11

因此x = 21;

您需要了解预增量(++ x)和后增量(x ++)。 见下文

 int x = 10;
 if (x++ == 10 )
     System.out.println( "X is equal to 10");// this statement will print

在上面的if条件中它将执行为true,因为首先它将比较10 == 10然后x将增加1并且x将变为11。

现在看下面: -

   if (++x == 10 )
     System.out.println( "X is equal to 10");// this will not print if condition will tern false

在上面,如果条件x将被预先递增,那么x将变为11,然后将进行比较,无论11 == 10,因此条件将失败。

希望这会有所帮助。

++x将返回(x+1)值, x值也将增加1。

x++将返回(x)值, x值也将增加1。

所以

x+=++xx=x+(x+1) ,相当于x=2*x+1

x+=++xx=x+(x) ,相当于x=2*x

..... ++ x:首先计算x = x + 1,然后使用x进行比较或计算实际任务..... x ++:首先比较/计算实际任务,然后计算x = x + 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM