Java x+;=++;x等于x=2x+;1:为什么?

Java x+;=++;x等于x=2x+;1:为什么?,java,Java,这个问题只是好奇:我想知道在x+++x 所以我试着: int x=10; x+=++x; System.out.println(x); 并打印出: 21 在使用其他值进行一些测试后,它似乎相当于x=2x+1。为什么?编译器是否将这一行解释为字节操作?(顺便说一下,x+=x++似乎相当于x=2x) 我不认为这是我在项目中使用过的东西,但我很想知道为什么我会得到这个结果 谢谢你的解释或提示 编辑:首先,谢谢你的回答 我知道++=操作符是如何工作的,也知道x++和++x操作符是如何工作的,但由于某

这个问题只是好奇:我想知道在
x+++x
所以我试着:

int x=10;
x+=++x;
System.out.println(x);
并打印出:

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

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

谢谢你的解释或提示

编辑:首先,谢谢你的回答

我知道
++=
操作符是如何工作的,也知道
x++
++x
操作符是如何工作的,但由于某种原因,(完全合乎逻辑且明显的)结果对我来说似乎很奇怪
我应该想清楚的,抱歉耽误了你的时间

它的计算方法是

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

  • 步骤3:最终结果存储在x i.e.21中

这是证据:

我创建了一个main类,如下所示:

public class MainClass{
public static void main(String...s){
int x = 10;
x += ++x;
}
}
然后使用
javap-cmainclass

  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
}

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

关于运算符优先级以及如何计算和使用
++x
x++/code>的信息。使用
++x
x
的值增加,然后使用
++x
变为
11
,该
x++=++x
变为
21
,即
10+11

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

因此
x+=x++
将意味着
10+10
,即
20

参见此处:-

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
值也将增加一

所以

x++=++x
是相同的
x=x+(x+1)
,相当于
x=2*x+1


x+=++x
x=x+(x)
相同,相当于
x=2*x
..++x:首先计算x=x+1,然后使用x来比较或计算实际任务
..…x++:首先比较/计算实际任务,然后计算x=x+1。x+x+1,即2x+1
x++=+x->
x=x+++x其中
++x
返回增加的值。代数?去掉++就得到了x+=x==2x该++添加了一个可能的副本
   if (++x == 10 )
     System.out.println( "X is equal to 10");// this will not print if condition will tern false