黑马程序员技术交流社区

标题: s = s+2; s+=2,有区别吗 [打印本页]

作者: _let'sgo    时间: 2015-11-2 22:06
标题: s = s+2; s+=2,有区别吗
今天看到这个
short s = 3;
s = s+2; s+=2,有区别吗?不是一样吗?
作者: didixyy    时间: 2015-11-2 22:09
不一样的 s+=2里面包含了系统带的强制转型 s=(short)s+2
作者: Mr___dangerous    时间: 2015-11-2 22:10
有区别,+=是一个运算符,运算时不会升类型,+会升类型
作者: Zzz___冬眠中    时间: 2015-11-2 22:30
+=是运算符 运算符可以自动转换数据类型
作者: Sayman    时间: 2015-11-2 22:54
类型转换的区别
作者: 顽固派。    时间: 2015-11-2 23:36
首先有一个知识点,就是byte,char,short型变量在进行混合运算时,会自动提升类型为int型,所以s+2的结果是int型,将int型的数值赋值给short型变量s,会出现损失精度的错误.而s+=2在底层,JVM会做强制类型转换的操作,即该式可以看成s = (short)(s + 2),不会编译出错.所以这两个赋值语句是有区别的.
作者: 迷茫不堪的年纪    时间: 2015-11-2 23:40
我帮你讲一下吧, 笨的.    short s =3 (声明类型是short-2个字节) ,   s+=2 (这个属于隐性的转换,就是小转大的时候系统自动提升)其实相当于s=(short)(s+2),  s=s+2 会编译错误,需要强转s=(short)(s+2),  一般不介意强转,因为有时候丢精度的
作者: sshh11    时间: 2015-11-2 23:46
不一样的 s+=2里面包含了系统带的强制转型 s=(short)s+2  强制转换类型!!!不同类型数据占有内存空间不同  数据会有损失
作者: 上帝的寵兒    时间: 2015-11-2 23:53
后面的隐含了一个强制类型转换
作者: chenhaiqian    时间: 2015-11-3 00:09
不一样, s = s+2会编译失败,因为s+2提升为int相加得到int类型;s+=2不会,因为编译器加了一个(short)强制转换
作者: 窝牛。    时间: 2015-11-3 00:10
都回答的不错
作者: 大自然的搬运工    时间: 2015-11-3 01:50
楼上都是大神
作者: 2209629404    时间: 2015-11-3 11:19
s+=2是有自动强制转换的
作者: oup    时间: 2015-11-3 13:04
会存在类型转换的问题
作者: 雨魂    时间: 2015-11-3 15:25


后面的隐含了一个强制类型转换
作者: z_one    时间: 2015-11-3 17:31
不一样,后面的进行了强制转换的步骤




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2