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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

int a=8;
a = a++;
大家打印结果试试,保证想不到.

不过很难解释,哪位大神能来给个好的解释?

17 个回复

正序浏览
huaihkiss 来自手机 中级黑马 2016-4-22 11:50:21
18#
是8是吧  后自加显示完再赋值给x的
回复 使用道具 举报
先运行,在自增
回复 使用道具 举报
  我想楼主提出的这个观点就是在于一种思维的问题。在编程时 特别像我们初学者 还没有把平时生活中的思维转换到编程的思维方式 这里的 a=a++ 用平时生活中的思维 我们会把它看成 a = (a++) 但真正编程的思维 应该是 把赋值好 右边的a 赋值给 赋值号 左边的 a 这个动作做完之后 a再 ++ 所以打印结果是 ++ 之前的结果 也就是 a = a
  这让我想到了很久以前看到的一个笑话
  话说妻子让程序员老公去买苹果 原话是这样:“老公,待会你出去买两斤苹果回来吧,要是碰见卖西瓜的,买一个。” 于是程序员老公就出去了。过了一会老公拿着一个苹果回来了。妻子他问什么只买了一个苹果,老公说因为碰见卖西瓜的了。

回复 使用道具 举报
执行结果是a=8,大家都试过了吧,
回复 使用道具 举报
我就想知道a=8对不对
回复 使用道具 举报
a = 8 赋值后再自增
回复 使用道具 举报
a=8                  
回复 使用道具 举报
张宪达 来自手机 中级黑马 2016-4-19 00:25:45
11#
a=8,不对吗?
回复 使用道具 举报
++在后面,先复制在参与运算:所以a=8
回复 使用道具 举报
这道题跟底层操作有关系,要点在于执行的时候是从右向左执行的.
回复 使用道具 举报
经典面试题   建议百度一下 与java的 JVM底层 有关   前面有 i= i++;的帖子  楼主可以看看
回复 使用道具 举报
这个好解释啊 先是把A付给A 然后自加 但是自加后并没有再进行附值
回复 使用道具 举报
有兴趣参与的不妨试试,结果估计会让你们惊奇.
回复 使用道具 举报
a++ 是啊先参加程序的运行在 赋值的所以你这里a值没变  而++a 是先自加 在赋值的
回复 使用道具 举报
要考虑到++参与运算时候使用,别想着赋值
回复 使用道具 举报
女神之泪 来自手机 中级黑马 2016-4-17 07:22:47
藤椅
直接a++,不要等号了。  这样先赋值了是吧,然后又给加一,那到底输出8还是9不能判断,是吧
回复 使用道具 举报
a的值不变的原因解释貌似需要分析底层数据在堆栈和局部变量区之间来回交换的过程,这个表达式告诉我们 ,不要在单个的表达式中对相同的变量赋值超过一次.........
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马