A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 旭辉lin 中级黑马   /  2014-9-1 19:01  /  1673 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 旭辉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

12 个回复

倒序浏览
x++是先运算,然后+1
所以你的x=x++; x还是为2
如果你改成x++;的话结果会有变化的
回复 使用道具 举报
            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在做自增的动作
回复 使用道具 举报 1 0
因为虚拟机会把 int x = 2的值存在一个临时变量中,然后x=x++运算完成之后不管值是多少,最后存在临时变量的值又重新赋予给了X,所以还是2.
回复 使用道具 举报 1 0
这涉及到内存,感觉是人为定义的东西,就像x++为什么自加
回复 使用道具 举报
x++
++x

单独存在时是一个意思

但是在公示里面 比如 y = x++
就不一样了  y = x++   虚拟机会把它看成 y = x ,  x++
回复 使用道具 举报
3楼真相。。。
回复 使用道具 举报
黑马黄武先 发表于 2014-9-1 19:43
因为虚拟机会把 int x = 2的值存在一个临时变量中,然后x=x++运算完成之后不管值是多少,最后存在临时变量 ...

明白了,多谢!
回复 使用道具 举报
x++是 x 先进行运算之后再加一,但是还没来得及参加运算,就又重新赋值了,所以还是2咯。就像我看中了一个东西,还没放进购物车,就退出了,进行下一次购物,但其实购物车里的还是原来的样子。
回复 使用道具 举报 1 0
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
回复 使用道具 举报

呵呵,不客气,不懂就多看几遍视频
回复 使用道具 举报
先赋值,在进行自加,第一次赋值后为2,第二次由2先赋值,再++,因为++都没有赋给x过
回复 使用道具 举报
孙雯 发表于 2014-9-1 22:06
x++是 x 先进行运算之后再加一,但是还没来得及参加运算,就又重新赋值了,所以还是2咯。就像我看中了一个 ...

非常形象的比喻啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马