黑马程序员技术交流社区

标题: short s1 = 1; s1 += 1;有什么错? [打印本页]

作者: lvwenwen88    时间: 2012-1-5 21:03
标题: short s1 = 1; s1 += 1;有什么错?
本帖最后由 lvwenwen88 于 2012-1-5 22:30 编辑

short s1 = 1; s1 += 1;有什么错?
作者: 李盈科    时间: 2012-1-5 21:18
s1=s1+1是有错的没有转换类型 s1+=1没错 因为+=虎自动为s1 转换类型
作者: 魏志雷    时间: 2012-1-5 21:21
这样的写法没有错,但是改成s1=s1+1;就错了,s1=s1+1;改成s1+=1;虽然是一个意思,但是在jvm里面是不同的方法做的,是运算符重载,所以是不一样的。
作者: 张冬冬    时间: 2012-1-5 21:56
没错、一点错误都没有
作者: soh    时间: 2012-1-5 21:58
我的不报错啊,编译通过,运行也不报错。。难道是你jdk的问题?
作者: 李林轩    时间: 2012-1-5 22:21
哥们这个是没有错的,s1=s1+1是有错的
作者: lvwenwen88    时间: 2012-1-5 22:30
谢谢,学习了
作者: 林晓波    时间: 2012-1-5 22:42
s1+=1;没错 s1=s1+1;s1+1表达式是值是int型传给s1 short型会出错
作者: 张伟~    时间: 2012-1-5 22:50
外面看到个相类似的问题。。结果发错了,尴尬
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
想不报错就必须强转:s1=short(s1+1);
少写了括号应该s1=(short)(s1+1),要不果断报错的。。
作者: chocolate    时间: 2012-1-6 22:06
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正确。




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