黑马程序员技术交流社区

标题: 编译出错的问题 [打印本页]

作者: 庄纪光    时间: 2011-9-28 21:58
标题: 编译出错的问题
为什么执行short s1 = 1; s1 = s1 + 1;时编译器报错,而short s1 = 1; s1 += 1;正确编译?
作者: 匿名    时间: 2011-9-28 22:40
short s1 = 1,s1是short型的,而s1+1返回的是int型的,你把int型的赋给short型的当然报错啦,而s1 += 1只有一步赋值操作,是在原来short型的基础上加1,不存在类型不匹配的问题。
作者: 匿名    时间: 2011-9-28 23:22
因为
s1 = s1 + 1;  
s1+1 这个表达式是类型是int 类型,与左边的short不一致,编译失败

而  s1+=1  其实它等价于(short)(s1+1)   它有一个隐式的强制类型转换,所以编译能通过
作者: 匿名    时间: 2011-9-29 02:52
标题: 强传问题
为什么执行short s1 = 1; s1 = s1 + 1;时编译器报错,而short s1 = 1; s1 += 1;正确编译?
short s1 = 1; s1 += 1;这个问题就是java虚拟机在编译时会自动相加的
short s1 = 1; s1 = s1 + 1;s1是short型的 而1是代表int型的他们相加得到的结果是int型的(也就是说s1 + 1)是int型的
你结果等于s1就会损失精度!
作者: 匿名    时间: 2011-9-29 08:21
s1=s1+1会错因为s1是short,而1是int,所以运算时会自动转换为int,再将int赋值给s1是需要强制转换,所以会错。
JAVA规范上说e1+=e2 实际上是 e1=(T1)(e1+e2),其中T1是e1的数据类型s1+=1等效于   s1=(short)(s1+1),所以是正确的。




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