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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑夜中那颗星 中级黑马   /  2015-10-30 15:21  /  935 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int  x = 3;
x = x++;
System.out.println(x);
输出结果是多少,解释一下为什么结果是这个?

17 个回复

倒序浏览
我用了CodeBloacks的C++和MyEclipse的Java,结果C++为4,Java为3。按我的理解来看
第一步:x = 3;
第二步 : x = x;
第三步 : x++;
第四步: System.out.println(x);
这样的话,应该是4,但是Java运行结果为3,我也郁闷了,同等大神解释吧。
回复 使用道具 举报
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
回复 使用道具 举报
首先是运算符优先级的问题,那么该问题就可以等同于 x = (x ++)  那么就是先算括号里面的:
1.先运算a++表达式的值,因为++在后面所有,当前a的值(3)作为a++表达式的值(3)
2.计算++,即a自增,a变为4
3.再赋值,将步骤1中的表达式的值(3)赋值给a,此时a又变成了3
4.相当于在内从中a的值由3变为4,再由4变为3
回复 使用道具 举报
黑夜中那颗星 发表于 2015-10-30 18:09
x = x++;
第一步:把x的值取出来存到一个临时内存空间里
第二步:x+1并把结果赋值给x这个时候是4

get到了,谢了。。。
回复 使用道具 举报
学习啊到了
回复 使用道具 举报
ppaapc 中级黑马 2015-10-30 19:52:39
7#
学习到了
回复 使用道具 举报
didixyy 中级黑马 2015-10-30 20:03:12
8#
学习到了
回复 使用道具 举报
结果是3啊,,因为++在后面嘛
回复 使用道具 举报
学会了  考试好像考过
回复 使用道具 举报
Switch_vov 发表于 2015-10-30 16:51
我用了CodeBloacks的C++和MyEclipse的Java,结果C++为4,Java为3。按我的理解来看
第一步:x = 3;
第二步 : ...

C+ +你学c的?
回复 使用道具 举报
用室友的计算机运行了输出结果是3因为你在运行的时候先进行赋值语句了。意思就是x=x++先调用x的值是=3的你将x++=3的值赋值给了x所以此时的x是=3的打印出来的结果是等于3没有问题。。。。
回复 使用道具 举报
sun7day1988 来自手机 中级黑马 2015-11-1 00:57:22
13#
学习了,一直没懂这个自增!
回复 使用道具 举报
赋值的运算优先级最低,先自增,在把整个表达式的值赋给x
回复 使用道具 举报

都学过啊,写算法一直都用C++的,
回复 使用道具 举报
跟我想的完全不一样
回复 使用道具 举报
zlg 来自手机 中级黑马 2015-11-1 12:19:58
17#
x=x++ 为先赋值再自增,x=++x 为先自增再赋值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马