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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© _let'sgo 中级黑马   /  2015-11-2 22:06  /  1109 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看到这个
short s = 3;
s = s+2; s+=2,有区别吗?不是一样吗?

16 个回复

倒序浏览
不一样的 s+=2里面包含了系统带的强制转型 s=(short)s+2
回复 使用道具 举报
有区别,+=是一个运算符,运算时不会升类型,+会升类型
回复 使用道具 举报
+=是运算符 运算符可以自动转换数据类型
回复 使用道具 举报
类型转换的区别
回复 使用道具 举报
首先有一个知识点,就是byte,char,short型变量在进行混合运算时,会自动提升类型为int型,所以s+2的结果是int型,将int型的数值赋值给short型变量s,会出现损失精度的错误.而s+=2在底层,JVM会做强制类型转换的操作,即该式可以看成s = (short)(s + 2),不会编译出错.所以这两个赋值语句是有区别的.
回复 使用道具 举报
我帮你讲一下吧, 笨的.    short s =3 (声明类型是short-2个字节) ,   s+=2 (这个属于隐性的转换,就是小转大的时候系统自动提升)其实相当于s=(short)(s+2),  s=s+2 会编译错误,需要强转s=(short)(s+2),  一般不介意强转,因为有时候丢精度的
回复 使用道具 举报
sshh11 中级黑马 2015-11-2 23:46:27
8#
不一样的 s+=2里面包含了系统带的强制转型 s=(short)s+2  强制转换类型!!!不同类型数据占有内存空间不同  数据会有损失
回复 使用道具 举报
后面的隐含了一个强制类型转换
回复 使用道具 举报
不一样, s = s+2会编译失败,因为s+2提升为int相加得到int类型;s+=2不会,因为编译器加了一个(short)强制转换
回复 使用道具 举报
都回答的不错
回复 使用道具 举报
楼上都是大神
回复 使用道具 举报
s+=2是有自动强制转换的
回复 使用道具 举报
oup 中级黑马 2015-11-3 13:04:31
14#
会存在类型转换的问题
回复 使用道具 举报


后面的隐含了一个强制类型转换
回复 使用道具 举报
z_one 中级黑马 2015-11-3 17:31:14
16#
不一样,后面的进行了强制转换的步骤
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马