黑马程序员技术交流社区

标题: 一个基础题 [打印本页]

作者: 黑夜中那颗星    时间: 2015-10-30 15:21
标题: 一个基础题
int  x = 3;
x = x++;
System.out.println(x);
输出结果是多少,解释一下为什么结果是这个?
作者: Switch_vov    时间: 2015-10-30 16:51
我用了CodeBloacks的C++和MyEclipse的Java,结果C++为4,Java为3。按我的理解来看
第一步:x = 3;
第二步 : x = x;
第三步 : x++;
第四步: System.out.println(x);
这样的话,应该是4,但是Java运行结果为3,我也郁闷了,同等大神解释吧。
作者: 黑夜中那颗星    时间: 2015-10-30 18:09
Switch_vov 发表于 2015-10-30 16:51
我用了CodeBloacks的C++和MyEclipse的Java,结果C++为4,Java为3。按我的理解来看
第一步:x = 3;
第二步 : ...

x = x++;
第一步:把x的值取出来存到一个临时内存空间里
第二步:x+1并把结果赋值给x这个时候是4
第三步:把临时内存空间里的3赋值给x,结果还是3
作者: young_ants    时间: 2015-10-30 18:12
首先是运算符优先级的问题,那么该问题就可以等同于 x = (x ++)  那么就是先算括号里面的:
1.先运算a++表达式的值,因为++在后面所有,当前a的值(3)作为a++表达式的值(3)
2.计算++,即a自增,a变为4
3.再赋值,将步骤1中的表达式的值(3)赋值给a,此时a又变成了3
4.相当于在内从中a的值由3变为4,再由4变为3
作者: Switch_vov    时间: 2015-10-30 18:20
黑夜中那颗星 发表于 2015-10-30 18:09
x = x++;
第一步:把x的值取出来存到一个临时内存空间里
第二步:x+1并把结果赋值给x这个时候是4

get到了,谢了。。。
作者: 大自然的搬运工    时间: 2015-10-30 18:23
学习啊到了
作者: ppaapc    时间: 2015-10-30 19:52
学习到了
作者: didixyy    时间: 2015-10-30 20:03
学习到了
作者: 洛克先生EN    时间: 2015-10-30 22:44
结果是3啊,,因为++在后面嘛
作者: 往事曾如风    时间: 2015-11-1 00:23
学会了  考试好像考过
作者: 青同学    时间: 2015-11-1 00:43
Switch_vov 发表于 2015-10-30 16:51
我用了CodeBloacks的C++和MyEclipse的Java,结果C++为4,Java为3。按我的理解来看
第一步:x = 3;
第二步 : ...

C+ +你学c的?
作者:   张恒宇    时间: 2015-11-1 00:54
用室友的计算机运行了输出结果是3因为你在运行的时候先进行赋值语句了。意思就是x=x++先调用x的值是=3的你将x++=3的值赋值给了x所以此时的x是=3的打印出来的结果是等于3没有问题。。。。
作者: sun7day1988    时间: 2015-11-1 00:57
学习了,一直没懂这个自增!
作者: 260744042    时间: 2015-11-1 11:11
赋值的运算优先级最低,先自增,在把整个表达式的值赋给x
作者: Switch_vov    时间: 2015-11-1 11:36
青同学 发表于 2015-11-1 00:43
C+ +你学c的?

都学过啊,写算法一直都用C++的,
作者: 冯景超    时间: 2015-11-1 12:13
跟我想的完全不一样
作者: zlg    时间: 2015-11-1 12:19
x=x++ 为先赋值再自增,x=++x 为先自增再赋值




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