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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 暴风城管 中级黑马   /  2016-3-15 00:07  /  3059 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

12黑马币
关于 int x=1;
     x=x++;
System.out.println(x);
java中到底是什么情况?明天还有课,最好快一点。

最佳答案

查看完整内容

这个主要是可以看做有一个隐性的变量 int x=0; x=x++; System.out.println(x); 第二个x=x++拆开看 等于是 int b; x=b; b=x++; 在调换下位置,按顺序,就是 int b; b=x++; x=b; 所以其实x还是不变的。

7 个回复

正序浏览
这个主要是可以看做有一个隐性的变量
int x=0;
x=x++;
System.out.println(x);
第二个x=x++拆开看
等于是
int b;
x=b;
b=x++;
在调换下位置,按顺序,就是
int b;
b=x++;
x=b;
所以其实x还是不变的。
回复 使用道具 举报
305450674 发表于 2016-3-18 12:10
首先呢,定义了一个 x 在堆内存中,然后给 x 赋值为1是指在常量池中 创建一个 1 的对象,再将x指向这个1.
运行 ...

Java中出了堆概念和常量池概念外还有其他类似的概念吗?
回复 使用道具 举报
首先呢,定义了一个 x 在堆内存中,然后给 x 赋值为1是指在常量池中 创建一个 1 的对象,再将x指向这个1.
运行x = x++的时候,根据++在变量x 后面,所以对 x进行先赋值  
也就是把本来存在的 x = 1的值 赋值给了 x 本身, 那么这个x还是指向常量池中的1
然后 第二个 x 再进行自加, 自加完后 x = 2  但是这个 x 另外存在在堆内存中,并不是指向常量池
最后打印的x 是第一个指向常量池中1的x, 所以x打印出来还是1
回复 使用道具 举报
http://soft.chinabyte.com/database/279/11431779.shtml
回复 使用道具 举报
回复 使用道具 举报
明白了  谢谢啊
回复 使用道具 举报
本帖最后由 xiaobinghe 于 2016-3-15 00:18 编辑

x++是x先参与运算在自增;而++x是先自增再参与运算;
单独使用:
        放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
参与运算使用:
        * 放在操作数的前面,先自增或者自减,然后再参与运算。
        * 放在操作数的后面,先参与运算,再自增或者自减。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马