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中
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+1x++=+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