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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄敏 中级黑马   /  2012-8-21 12:42  /  1505 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄敏 于 2012-8-21 13:05 编辑

今天无意间看到,这个面试题,但是怎么想就就是想不明白
给出的题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
   答案:   对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
     对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。


为什么第一个就有错了,第二个就没错了?他们之间的运算有什么区别吗?  s1 += 1,s1= s1+1,不是一样的结果吗?  请相信解释清楚

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
short s1 = 1; s1 = s1 + 1;
涉及基本类型的自动提升,等号右边s1+1是表达式,自动提升到最高等级的类型也就是int;再向下赋值给short就会报错,丢失精度

short s1 = 1; s1 += 1;
是java提供的简写+=,内部有特殊的转换,不必担心类型问题

评分

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

查看全部评分

回复 使用道具 举报
你可以仔细看一下那个的答案我觉得说的很明确,short s1=1,s1=s1+1;为什么不成立 之前你已经把s1的类型设定为了Short,而后面的+1代表是意思是 一个short类型的+上一个int类型的整数,这里是需要强制转换才可以的。而第二个就没有什么要求了,因为+=是运算符。

评分

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

查看全部评分

回复 使用道具 举报
s1=s1+1;中1默认为int型,运算结果自动转换为int型,而s1本身是short型的,所以赋值时出现错误;
而s1+=1;中+=是复合赋值运算符,该运算符自动完成了强制转换,不会改变结果的类型,所以不会出错。

评分

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

查看全部评分

回复 使用道具 举报
s1+1运算的结果是int型,把它赋值给一个short型变量s1,所以会报错;而在s1+=1;中,由于是s1是short类型的,所以1首先被强制转换为short型,然后再参与运算,并且结果也是short类型的,因此不会报错。

评分

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

查看全部评分

回复 使用道具 举报
楼主 ,记得已经解答完后的贴 记得 回帖说明,题已经解决
回复 使用道具 举报
黄敏 中级黑马 2012-8-21 13:09:54
7#
问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马