黑马程序员技术交流社区

标题: 问题虽小,但是不懂 [打印本页]

作者: 旭辉lin    时间: 2014-9-1 19:01
标题: 问题虽小,但是不懂
本帖最后由 旭辉lin 于 2014-9-1 21:17 编辑

public class Test {

        public static void main(String[] args) {
                int x = 2;
                x=x++;
                x=x++;
                System.out.println(x);

        }
}
输出结果为什么是2
作者: xiayoutianxia    时间: 2014-9-1 19:15
x++是先运算,然后+1
所以你的x=x++; x还是为2
如果你改成x++;的话结果会有变化的
作者: 马嘉    时间: 2014-9-1 19:20
            int x = 2;
            int y=x++;
            int z=x++;
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
这个的输出结果就是4,2,3
是因为z=x++;
x先把x的值得付给z,然后x在做自增的动作
作者: 黑马黄武先    时间: 2014-9-1 19:43
因为虚拟机会把 int x = 2的值存在一个临时变量中,然后x=x++运算完成之后不管值是多少,最后存在临时变量的值又重新赋予给了X,所以还是2.
作者: 范鹏霄    时间: 2014-9-1 20:06
这涉及到内存,感觉是人为定义的东西,就像x++为什么自加
作者: noiary    时间: 2014-9-1 20:13
x++
++x

单独存在时是一个意思

但是在公示里面 比如 y = x++
就不一样了  y = x++   虚拟机会把它看成 y = x ,  x++
作者: 粺¹³¼畅    时间: 2014-9-1 20:21
3楼真相。。。
作者: 旭辉lin    时间: 2014-9-1 21:04
黑马黄武先 发表于 2014-9-1 19:43
因为虚拟机会把 int x = 2的值存在一个临时变量中,然后x=x++运算完成之后不管值是多少,最后存在临时变量 ...

明白了,多谢!
作者: 孙雯    时间: 2014-9-1 22:06
x++是 x 先进行运算之后再加一,但是还没来得及参加运算,就又重新赋值了,所以还是2咯。就像我看中了一个东西,还没放进购物车,就退出了,进行下一次购物,但其实购物车里的还是原来的样子。
作者: 这个夏天的芬芳    时间: 2014-9-1 23:53
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
作者: 黑马黄武先    时间: 2014-9-2 04:25
旭辉lin 发表于 2014-9-1 21:04
明白了,多谢!

呵呵,不客气,不懂就多看几遍视频
作者: 雯雯暖暖    时间: 2014-9-2 08:36
先赋值,在进行自加,第一次赋值后为2,第二次由2先赋值,再++,因为++都没有赋给x过
作者: myzhang    时间: 2014-9-3 09:17
孙雯 发表于 2014-9-1 22:06
x++是 x 先进行运算之后再加一,但是还没来得及参加运算,就又重新赋值了,所以还是2咯。就像我看中了一个 ...

非常形象的比喻啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2