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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯狂程序 中级黑马   /  2013-3-20 11:40  /  1138 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢  发表于 2013-3-20 12:27

5 个回复

正序浏览
你看一下毕老师的视频,上面有,具体是这样的:
s1是short类型,用short类型加上一个整形,他会强制转换成4个字节的int类型,short是两个字节的,会丢失两个字节的长度,因此会报错
short s1 = 1; s1 += 1;不会报错 s1=s1+1;改成s1+=1;虽然是一个意思,但是在jvm里面会对数据类型进行自动的提升,所以不会报错

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李阳阳 于 2013-3-20 12:32 编辑

  在java语言中,整数的默认类型是int型,浮点数的默认类型是double型,对于不同类型的数值进行计算时,
结果总是转换为经度最高的数据类型,因此将计算结果赋值给变量时,这个变量的类型的精度不能低于
参加计算的精度最高的数据类型,否则就会编译错误。
因为s与int数据求和后是int类型的数值,所以无法复制给short类型的变量s,所以下列式子会编译错误。
short s=1; s=s+1;

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
这应该是一道java面试题吧,我面试的时候也碰到过
首先我们看short s1 = 1; s1 = s1+1;s1是short类型,用short类型加上一个整形,他会强制转换成4个字节的int类型,而把int类型复制给一个连个字节的short,会丢失两个字节的长度,因此会报错
short s1 = 1; s1 += 1;不会报错 s1=s1+1;改成s1+=1;虽然是一个意思,但是在jvm里面是不同的方法做的,是运算符重载,不会报错

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼上正解。。。因为1是int型,s1是short型,两个相加会类型提升为int型,需强制转换为short型,应改成s1=(short)(s1+1);
而后面那句s1+=1;自动完成强类型转换

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
short s1 = 1; s1 = s1+1;会报类型转换错误,需要进行类型强制转换, short s1 = 1; s1 += 1; java虚拟机会自动进行类型提升,可以正常运行。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马