java语言 int x=3; x=x++;

为什么输出两次x值都是3, x不是自增1了吗?
第一次输出x 值 是3
第二次输出x 的值 也是3
这是怎么回事啊?

总体情况应该是这样的:

第一种情况展示

第一步骤:代码如下所示

public static void main(String[] args) {

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

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


}

第二步骤:代码截图如下所示

第三步骤:运行结果如下所示:

总结:x = x++;  执行过程应该这样理解

x1 = 3

x2 = x1+1

x=x1

第二种情况展示

public static void main(String[] args) {

    int x=3;
    //x本身自增
    x++;
    System.out.println(x);

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


}

总结:x=++x这样理解

x1 = 3

x2 = x1+1

x=x2

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-06

按照优先级,先x++后=,所以x++后x中的值是4,但是x++是先取值再+1,所以整个x++表达式表示的值是3,=赋值后,x从4又变回了3

这在jvm中是用栈操作实现的运算和赋值。

int x = 3;
  x = x++;

以上两段代码编译成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
     1  istore_1 [x]
     2  iload_1 [x]
     3  iinc 1 1 [x]
     6  istore_1 [x]

本回答被网友采纳
第2个回答  2019-06-06
x=x++之前x是3
x=x++之后 后自增符号是先赋值再加一,所以x=x=3喽
赋值完成后x会加一,但你打印的是x的值又不是x+1的值当然还是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++; 的时候就蒙了

第3个回答  2019-06-06
逻辑问题,循环完了没?结束语句在那里?自己整理一下思路,输出看看就明白了,别人再怎么说还不如自己动手试一下
第4个回答  2019-06-06
运算符顺序问题