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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liu100chao 中级黑马   /  2015-6-16 19:59  /  639 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s = 4;
s = s + 5;请问这句为什么编译失败
s+=5;而这句编译就能通过呢??、

11 个回复

倒序浏览
s+=5 就相当于s=(short)s+5,+=是java的运算符,编译器会进行处理,返回的就是S的类型
s=s+5相当于 s=s+5返回类型是s与5中的最高类型int,想赋值给short类型,所以会报错
回复 使用道具 举报
因为s是short类型的数据,5默认为int类型的数据,运算之后,结果自动转换成int类型,用short类型的数据接收,可能会损失精度,;而s+=5,它准确来说应该是赋值运算,不涉及数据类型自动提升
回复 使用道具 举报
java中基本类型转换问题。
回复 使用道具 举报
s+=5   <=> s = (short)(s+5)
回复 使用道具 举报
楼上的回答都比较全面!有点简单,这个是基础的问题!
回复 使用道具 举报
java中基本类型转换问题。
回复 使用道具 举报
楼上回答很好,小转大,自动转,大转小,强制转
回复 使用道具 举报
SHISY 中级黑马 2015-6-16 22:30:40
9#
因为在short在计算时自动提升为int类型,int类型在赋值给short时会损失精度,s+=5其中包含了一个隐形的强制转换相当于b = (byte)(b+1);
回复 使用道具 举报
明白了!谢谢
回复 使用道具 举报
谢谢大家了!
回复 使用道具 举报
hi潘 中级黑马 2015-6-17 23:49:16
12#
类型转换问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马