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

© lvwenwen88 黑马帝   /  2012-1-5 21:03  /  4389 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lvwenwen88 于 2012-1-5 22:30 编辑

short s1 = 1; s1 += 1;有什么错?

10 个回复

倒序浏览
s1=s1+1是有错的没有转换类型 s1+=1没错 因为+=虎自动为s1 转换类型
回复 使用道具 举报
这样的写法没有错,但是改成s1=s1+1;就错了,s1=s1+1;改成s1+=1;虽然是一个意思,但是在jvm里面是不同的方法做的,是运算符重载,所以是不一样的。
回复 使用道具 举报
没错、一点错误都没有
回复 使用道具 举报
谢谢,学习了
回复 使用道具 举报
s1+=1;没错 s1=s1+1;s1+1表达式是值是int型传给s1 short型会出错
回复 使用道具 举报
张伟~ 黑马帝 2012-1-5 22:50:36
7#
外面看到个相类似的问题。。结果发错了,尴尬
short s1 = 1; s1 += 1;这两句没错啊,如果要说错也是short s1 = 1; s1 =s1+1;有错
因为s1=s1+1这句话先是算出s1+1的值,然后再将值赋给s1,由于s1+1得到是一个int类型的值(运算中s1自动转换成int类型),当你把这个int类型(4个字节)的赋给右边2个字节的short类型s1就会损失精度,当然也就会报错了。想不报错就必须强转:s1=short(s1+1);
而s1+=1这句话着不同,它只运算了一次,就直接将s1+1的值赋给了s1,并且自动完成了强转的动作。
回复 使用道具 举报
张伟~ 黑马帝 2012-1-5 22:53:06
8#
想不报错就必须强转:s1=short(s1+1);
少写了括号应该s1=(short)(s1+1),要不果断报错的。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马