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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

short  s = 1;
s = s+1;

short s = 1;
s+=1;
我知道第一种肯定是没法编译通过的,可是第二种,我印象里面一直是:s+=1;相当于s=s+1;可是第二种可以编译成功,能详细讲一下么?
大神,这厢有礼了.

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

9 个回复

正序浏览
最主要的是s+=1是一个赋值运算符
回复 使用道具 举报
mingtianrsm 发表于 2014-10-16 22:18
第一个类型不匹配,因为=右边有未知数;
第二个是赋值运算,虽然进行了+1运算,但是它的最终目的是赋值,所 ...

说的挺直白的,想通了.
回复 使用道具 举报
第1种是进行了两次运算 所以会提示丢失精度。第二种是只进行了一次运行
回复 使用道具 举报
第一个类型不匹配,因为=右边有未知数;
第二个是赋值运算,虽然进行了+1运算,但是它的最终目的是赋值,所以先对=两边的结果进行类型判断,如果不一致的话会对右边进行强制转换,所以可以编译通过。第一个不是赋值运算,所以不会对两边进行检测,等右边算好去传给左边时,类型不匹配就错了
回复 使用道具 举报
这个简单。。。因为1是int型,占四个字节,而short型的s只占两个字节,当s+1是低位的s会向高位转,故s+1运算后为int型,无法复制给short型的s,故不能编译。。。
回复 使用道具 举报
God’s favoure 发表于 2014-10-16 21:07
主要是第二个,第一个需要强转就好了,但是第二个不懂为什么是对的.

s+=1 过程是
s+1 此时结果为int吧!
然后自动(short)(s+1)进行了强转
最后s=(short)(i+1)赋值给s所以不会报错
回复 使用道具 举报
Eric1225 发表于 2014-10-16 21:00
s+=1  s =  (s的类型)(s+1)

主要是第二个,第一个需要强转就好了,但是第二个不懂为什么是对的.
回复 使用道具 举报
s+=1 <=> s =  (s的类型)(s+1)
回复 使用道具 举报
+=这种运算,内涵了强制类型转换功能,s+=1等价于s=(short)(s+1)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马