黑马程序员技术交流社区
标题: 【已解决】关于数据类型转换问题 [打印本页]
作者: 黄敏 时间: 2012-8-21 12:42
标题: 【已解决】关于数据类型转换问题
本帖最后由 黄敏 于 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,不是一样的结果吗? 请相信解释清楚
作者: 李知伦 时间: 2012-8-21 12:50
short s1 = 1; s1 = s1 + 1;
涉及基本类型的自动提升,等号右边s1+1是表达式,自动提升到最高等级的类型也就是int;再向下赋值给short就会报错,丢失精度
short s1 = 1; s1 += 1;
是java提供的简写+=,内部有特殊的转换,不必担心类型问题
作者: 韩爽 时间: 2012-8-21 12:54
你可以仔细看一下那个的答案我觉得说的很明确,short s1=1,s1=s1+1;为什么不成立 之前你已经把s1的类型设定为了Short,而后面的+1代表是意思是 一个short类型的+上一个int类型的整数,这里是需要强制转换才可以的。而第二个就没有什么要求了,因为+=是运算符。
作者: 陈冲 时间: 2012-8-21 12:55
s1=s1+1;中1默认为int型,运算结果自动转换为int型,而s1本身是short型的,所以赋值时出现错误;
而s1+=1;中+=是复合赋值运算符,该运算符自动完成了强制转换,不会改变结果的类型,所以不会出错。
作者: 王海亮 时间: 2012-8-21 12:58
s1+1运算的结果是int型,把它赋值给一个short型变量s1,所以会报错;而在s1+=1;中,由于是s1是short类型的,所以1首先被强制转换为short型,然后再参与运算,并且结果也是short类型的,因此不会报错。
作者: 滔哥 时间: 2012-8-21 13:00
楼主 ,记得已经解答完后的贴 记得 回帖说明,题已经解决
作者: 黄敏 时间: 2012-8-21 13:09
问题已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |