黑马程序员技术交流社区

标题: 急,在线等 [打印本页]

作者: 暴风城管    时间: 2016-3-15 00:07
标题: 急,在线等
关于 int x=1;
     x=x++;
System.out.println(x);
java中到底是什么情况?明天还有课,最好快一点。

作者: huhemingtiancai    时间: 2016-3-15 00:07
这个主要是可以看做有一个隐性的变量
int x=0;
x=x++;
System.out.println(x);
第二个x=x++拆开看
等于是
int b;
x=b;
b=x++;
在调换下位置,按顺序,就是
int b;
b=x++;
x=b;
所以其实x还是不变的。
作者: xiaobinghe    时间: 2016-3-15 00:16
本帖最后由 xiaobinghe 于 2016-3-15 00:18 编辑

x++是x先参与运算在自增;而++x是先自增再参与运算;
单独使用:
        放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
参与运算使用:
        * 放在操作数的前面,先自增或者自减,然后再参与运算。
        * 放在操作数的后面,先参与运算,再自增或者自减。

作者: 暴风城管    时间: 2016-3-15 00:24
明白了  谢谢啊
作者: huazhifansun1    时间: 2016-3-16 13:34

作者: 新手上路    时间: 2016-3-16 16:06
http://soft.chinabyte.com/database/279/11431779.shtml
作者: 305450674    时间: 2016-3-18 12:10
首先呢,定义了一个 x 在堆内存中,然后给 x 赋值为1是指在常量池中 创建一个 1 的对象,再将x指向这个1.
运行x = x++的时候,根据++在变量x 后面,所以对 x进行先赋值  
也就是把本来存在的 x = 1的值 赋值给了 x 本身, 那么这个x还是指向常量池中的1
然后 第二个 x 再进行自加, 自加完后 x = 2  但是这个 x 另外存在在堆内存中,并不是指向常量池
最后打印的x 是第一个指向常量池中1的x, 所以x打印出来还是1
作者: 赵浩霖    时间: 2016-3-18 21:36
305450674 发表于 2016-3-18 12:10
首先呢,定义了一个 x 在堆内存中,然后给 x 赋值为1是指在常量池中 创建一个 1 的对象,再将x指向这个1.
运行 ...

Java中出了堆概念和常量池概念外还有其他类似的概念吗?




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