黑马程序员技术交流社区

标题: s = s+2和s+=2的区别问题。 [打印本页]

作者: 张淼    时间: 2012-9-26 08:55
标题: s = s+2和s+=2的区别问题。
short s = 3;
s = s+2;
s+=2;

s = s+2;s+=2;有什么区别,为什么?

老师讲的时候说一个会报错,一个不会报错,这两句应该怎么理解呢?底层到底是怎么实现的呢?


作者: 唐学松    时间: 2012-9-26 09:01
区别在于声明的s如果是short类型,short s =2

s =s+2编译时报错,
因为s+2的时候会提升为int类型,
然后再赋给short类型的s时会报错:损失精度。
s+=2则可以通过编译,因为它内部会有一个自动转换过程。
这应该是它们的主要区别


作者: 刘进朝    时间: 2012-9-26 09:37
本帖最后由 刘进朝 于 2012-9-26 09:38 编辑

已经声明了s是short类型short s =3
s =s+2编译的时候会报错,是因为s+2的时候会提升为int类型,
然后再赋给short类型的s时会报错:损失精度。
s+=2则可以通过编译,是因为它内部会有一个自动转换过程。
这是它们的主要区别.
2是int型的数值,和short型的数值相加,当然会提升为比short类型长一点的int类型数值.
所以会损失精度,short类型占用16位内存,而int类型占用32位内存.




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