黑马程序员技术交流社区
标题:
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