黑马程序员技术交流社区

标题: 关于java自增问题 求解 [打印本页]

作者: Advances    时间: 2015-4-7 09:00
标题: 关于java自增问题 求解
public static void main(String[] args) {
                int a=0;
                a++;
                System.out.println(a);
                a=a++;
                System.out.println(a);
        }
这两个有啥区别?
作者: 幕丶落    时间: 2015-4-7 09:04
这两个从结果上看没什么区别
a++ 就相当于a=a+1,所以 a=a++ 多一次赋值,没必要
作者: 呆呆呆呆孔    时间: 2015-4-7 09:11
如果只输出a++ 自增运算后的a的值是没有区别的,
但是如果将a++自增运算赋值给其他变量,变量的结果会不同,a的值还是一样
作者: Advances    时间: 2015-4-7 10:00
呆呆呆呆孔 发表于 2015-4-7 09:11
如果只输出a++ 自增运算后的a的值是没有区别的,
但是如果将a++自增运算赋值给其他变量,变量的结果会不同 ...

是不是就是说  a=a++这是赋值运算   后面的++不再计算
作者: 呆呆呆呆孔    时间: 2015-4-23 23:15
Advances 发表于 2015-4-7 10:00
是不是就是说  a=a++这是赋值运算   后面的++不再计算

是这个意思,a++属于单条语句,只要没涉及任何运算,结果都是一样的
此情况中,涉及赋值运算了,被赋值的那个变量值得结果会不同的
作者: 猫猫虫    时间: 2015-4-23 23:29
这么简单   其实结果都是一样的
作者: OCTSJimmy    时间: 2015-4-23 23:33
哈,这个我昨两天刚问过老师亮哥。
具体原理是这样的:
int a = 1;
a = a++;

++运算符的运行原理:
1、首先在内存中开辟一块临时区域,将当前的a值放进去
2、a做a=a+1运算
3、假如++符号在变量的右侧,则该行的所有计算均使用 临时的a值,否则直接使用变更后的a值。

因此a=a++实际上a自增了1,但又马上被原值覆盖掉了。
作者: zhangjnia    时间: 2015-4-24 09:25
这下都是1了
作者: shw16888    时间: 2015-4-24 10:03
学习了,感谢
作者: ye646682485    时间: 2015-4-24 10:08
a++自增1在赋值给a
作者: maimingliang    时间: 2015-4-24 10:22
就这个例子来说没什么区别。因为a++自增1;而a=a++,先把a的赋值给a,然后a再自增1,就相当于a自增1了。所以说就这个例子没有区别。
作者: 小宇哥    时间: 2015-4-24 11:01
两个结果在这里都相同:)




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