黑马程序员技术交流社区

标题: 关于short的基础问题 [打印本页]

作者: 毕影彬    时间: 2012-11-5 15:57
标题: 关于short的基础问题
本帖最后由 毕影彬 于 2012-11-6 07:36 编辑

short s1 = 1; s1 = s1 + 1; 是错误的。
但是,为什么s1 += 1; 是正确的, 求解。

作者: 齐连涛    时间: 2012-11-5 16:05
s1 = s1 + 1; 这个表达式后面的1是int类型  1跟s1相加,s1自动提升成了int类型 结果也是int类型  赋给short 没有强转不行
s1 += 1; 内部实现了强转;
不清楚 在回去看看视频吧
作者: 黑马周磊    时间: 2012-11-5 16:10
s1 = s1 +1; 有个赋值动作。s1是short型,1是int型,所以s1+1后的值是int型。把一个int型的值赋给short的变量是不可以的。
s1 += 1;的赋值动作是隐式的,由编译器来完成的,相当于强制把类型转换成了short型。
作者: 朱宏青    时间: 2012-11-5 16:16
可以这样理解:s1 = s1 + 1;这个是分步运算,先将右边的算好,然后再赋给左边的。由于1这个数系统默认是int型的,按照规定,低级的转成高级,所以si被隐式的转换成了int,那么右边最后是int型,左边则是short型,自然不能赋予。

而si +=1;这个你可以理解为同步运算,s1的优先级比1的要高,所以按照s1的标准来,那么s1+1的结果就会被转换成short再赋予给s1:s1 = (short)(s1+1);
作者: 刘丽娜    时间: 2012-11-5 20:19
上面的是类型转换错误  下面是java的特性 可以自动类型转换




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