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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周斌 中级黑马   /  2012-11-1 19:48  /  2219 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周斌 于 2012-11-2 19:14 编辑

short s1 = 1; 则s1 = s1 + 1,s1 += 1;有什么不同

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

6 个回复

倒序浏览
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

     对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

回复 使用道具 举报
s1 = s1 + 1;//会损失精度
s1 += 1;//不会损失精度,相当s1=short(s1+1);
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
回复 使用道具 举报
对于short我还没怎么了解,还有这么个情况
回复 使用道具 举报
s1 = s1 + 1;编译不会通过,s1+1会被转换成int类型,将int型赋值给short型会损失精度,因此,jvm会报错
s1 += 1;编译会通过,相当于将s1+1强制转换成short型了
回复 使用道具 举报
在s1+1运算中,s1会被自动提升为int型,与1相加还是int型,int型赋值给short型,编译器会提示损失精度,该变量赋值需要类型的强制类型转换,而s1+=1时,是直接进行加法运算,后还是short型,故可以顺利编译!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马