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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦想工程师 中级黑马   /  2016-10-3 22:31  /  2864 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

s=1;
s=s++;
为什么会输出s=1?
今天有人问我,我也不知道怎么回答
有没有大牛说详细点的

22 个回复

倒序浏览
看做两部分。s=s++,先创建一个变量s,然后把s++的值赋给左边,右边计算完s++变成1,s自增变成2,赋值的是1。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报 1 0
s=1;
temp=s;
s=s+1;
s=temp;能看懂么
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
s++的过程是
temp=s;
s=s+1;
s=temp;自增减不是一步完成的,中间有一个临时变量,把你的s=s++;写成两行打个断点调试一下也可以看出来
s=
     s++;
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
可以去看他底层源码  你会知道的!
回复 使用道具 举报
s=1;
s=s++;
为什么会输出s=1?
这是++自增在前在后的区别。因为代码是一行行从左到右执行的,让我一句句代码解释意思。
s=1;
给名为 s 的变量赋值为 1 。
s=s++;
给名为 s 的变量重新赋值 s;也就是之前的1。 然后s自增。楼主不懂的地方就在这里,++在要自增的目标后面,所以是先赋值后自增,所以赋值时候的 s 内的值并没有变,还是原先的 1。这个自增用在这其实是个废指令,并不会操作任何变量。如果改成
s=++s ;
这时候就不一样了,虚拟机读到s=++他就知道  哦 这里有个要自增的值,所以就会先自增后面的 s 。自增变成2后在赋值给 s 。

自增自减在前就先自增或自减在参加运算,在后就先运算后自增或自减,在语句中的时候先运算语句结束后在自增或自减,优先级就是这样的。

结束语:这个问题在毕向东基础视频前两天就讲了啊,同学你没看吧…………。

回复 使用道具 举报
运算时是先赋值再自增
回复 使用道具 举报
加号在右边,先运算再自增
回复 使用道具 举报
im_hao 初级黑马 2016-10-4 23:33:42
9#
有点懂了
回复 使用道具 举报
先赋值,再运算
回复 使用道具 举报
我觉得不是先赋值再运算这么简单,因为毕竟执行了s++打印出来的s应该是2.断点亲测,s从来没到过2。相当于s++没有执行。
求大牛解释;
回复 使用道具 举报
public static void main(String[] args) {
                int s = 1;
                int a = 1;
                s = a++;
                System.out.println(s);//1
                System.out.println(a);//2
        }
感觉如果用一个变量进行赋值运算再进行自加,自加的运算会被停止或者取消,不明白其中的原理
回复 使用道具 举报
自加在后,先使用再后加。
回复 使用道具 举报
先赋值 后自增
回复 使用道具 举报
先赋值,在加。如果是++s就是2了
回复 使用道具 举报
s++  自增符号先参与运算,将s=1的值赋给左边,然后在 自增变为2
回复 使用道具 举报
这个是把表达式赋给s,而表达式s++的值是1,所以最后是1
回复 使用道具 举报
没有for循环
回复 使用道具 举报
因为赋值 ++在后面是先赋值 后++ 如果是 s= ++s  s就是等于2了
回复 使用道具 举报
r1503882525 发表于 2016-10-4 22:56
s=1;
s=s++;
为什么会输出s=1?

你说的这个我懂,首先s赋值为1,然后s=s++是将s=1重新赋值给s然后s++.但是问题就出在这,就算是先赋值再运算,加加一旦执行,s变量的值也是会增加的呀,你后面输出s是哪个s?难道两个s不是同一个变量吗?但是局部变量名不能重复啊?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马