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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lvwenwen88 黑马帝   /  2012-1-5 21:03  /  3990 人查看  /  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里面是不同的方法做的,是运算符重载,所以是不一样的。
回复 使用道具 举报
没错、一点错误都没有
回复 使用道具 举报
soh 黑马帝 2012-1-5 21:58:28
报纸
我的不报错啊,编译通过,运行也不报错。。难道是你jdk的问题?
回复 使用道具 举报
哥们这个是没有错的,s1=s1+1是有错的
回复 使用道具 举报
谢谢,学习了
回复 使用道具 举报
s1+=1;没错 s1=s1+1;s1+1表达式是值是int型传给s1 short型会出错
回复 使用道具 举报
张伟~ 黑马帝 2012-1-5 22:50:36
9#
外面看到个相类似的问题。。结果发错了,尴尬
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,并且自动完成了强转的动作。
回复 使用道具 举报
想不报错就必须强转:s1=short(s1+1);
少写了括号应该s1=(short)(s1+1),要不果断报错的。。
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1;有错,         
s1是short型,s1+1是int型,,                      题目是这样的                  short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
不能显式转化为short型。
可修改为s1 =(short)(s1 + 1) 。                           这是个经常面试时候容易  碰见的一个问题   希望你看了后 面试的时候能用的到 ····!
short s1 = 1; s1 += 1正确。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马