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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毕影彬 中级黑马   /  2012-11-5 15:57  /  1699 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 毕影彬 于 2012-11-6 07:36 编辑

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

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

4 个回复

正序浏览
上面的是类型转换错误  下面是java的特性 可以自动类型转换
回复 使用道具 举报
可以这样理解:s1 = s1 + 1;这个是分步运算,先将右边的算好,然后再赋给左边的。由于1这个数系统默认是int型的,按照规定,低级的转成高级,所以si被隐式的转换成了int,那么右边最后是int型,左边则是short型,自然不能赋予。

而si +=1;这个你可以理解为同步运算,s1的优先级比1的要高,所以按照s1的标准来,那么s1+1的结果就会被转换成short再赋予给s1:s1 = (short)(s1+1);
回复 使用道具 举报
s1 = s1 +1; 有个赋值动作。s1是short型,1是int型,所以s1+1后的值是int型。把一个int型的值赋给short的变量是不可以的。
s1 += 1;的赋值动作是隐式的,由编译器来完成的,相当于强制把类型转换成了short型。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
s1 = s1 + 1; 这个表达式后面的1是int类型  1跟s1相加,s1自动提升成了int类型 结果也是int类型  赋给short 没有强转不行
s1 += 1; 内部实现了强转;
不清楚 在回去看看视频吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马