总体情况应该是这样的:
第一种情况展示
第一步骤:代码如下所示
public static void main(String[] args) {第二步骤:代码截图如下所示
第三步骤:运行结果如下所示:
总结:x = x++; 执行过程应该这样理解
x1 = 3
x2 = x1+1
x=x1
第二种情况展示
总结:x=++x这样理解
x1 = 3
x2 = x1+1
x=x2
按照优先级,先x++后=,所以x++后x中的值是4,但是x++是先取值再+1,所以整个x++表达式表示的值是3,=赋值后,x从4又变回了3
这在jvm中是用栈操作实现的运算和赋值。
int x = 3;以上两段代码编译成class文件后,指令顺序如下:
把3压入栈中
弹出栈顶的值3存入变量x中(对应x=3的这句赋值操作)
把变量x中的值3压入栈中
把变量x的值+1(此时x中的值是4,但是4没有被压入栈中)(对应x++)
弹出栈顶的值3存入变量x中(x的值从4变成了3)(对应x=x++这句的赋值操作)
以下是class文件的内容
0 iconst_3那就是说x++ 没有执行吗?
我没太懂你说的?
有没有相关的文档, 我去看看
有个毛文档,就一个运算符哪有文档
追问我明白了, 你说的输出的是x 不是x+1的值, 我们通常x++ 不是 x+1后自动在赋值给x吗?
为什么这次 用 x=x++ 就不行呢?
不是,你要先搞明白前自增和后自增的区别
就是x++和++x的区别
x++是先赋值给其他变量如果有的话,再加一
++x是先加一再把加一后的值赋值给其他变量如果有的话
运算符在前 在后的区别我知道的
我就是不知道
x=x++; x 先把自身值给x, 然后自身+1, 输出x 怎么是原值呢, x+1,怎么没有改变自身呢? x++ 不是相当于x=x+1; 吗?
换个值
y=x++;
这样就不会存在问题,一切都能说的痛,但 换成 x=x++; 的时候就蒙了