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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

13 个回复

倒序浏览
Yunny 来自手机 中级黑马 2015-7-10 00:08:58
沙发
沙发沙发~!
回复 使用道具 举报
真棒,加油!
回复 使用道具 举报
对的。嗯嗯
回复 使用道具 举报
好像是这样
回复 使用道具 举报
学习了。不错。
回复 使用道具 举报
是这样的,点个赞
回复 使用道具 举报
学习了
回复 使用道具 举报
很对啊,就是这么用的
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1;进行了一次运算,运算过程中产生了类型提升的问题
回复 使用道具 举报
。。。。。。。。。。。。。
回复 使用道具 举报
wh121 中级黑马 2015-7-10 15:42:10
12#
是指 s1 += 1 在编译器里默认做了强制性转换处理  ??
回复 使用道具 举报
s1是short型的,当s1与1相加是会自动类型提升提升为int型,而short型是2byte,int是4byte,所以把和赋值给s1会到导致丢失精度。而“+=”是一个运算符,它本身隐藏着强制类型转换,即s1=(short) (s1+1).所以不会报错。如果解决了你的问题那就给点黑马币或技术分吧哈哈!
回复 使用道具 举报
的确是这样的,因为相互转型存在精度变化问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马