黑马程序员技术交流社区

标题: 跪求解释,short s=4;s=s+5为什么编译不了,而s+=5就可以编译 [打印本页]

作者: rhyhhg5    时间: 2015-8-25 20:43
标题: 跪求解释,short s=4;s=s+5为什么编译不了,而s+=5就可以编译
求大神解释
作者: MilesMatheson    时间: 2015-8-25 22:28
s=s+5;这条代码中,s+5 之后得到的结果自动转为int型,然而将int型数据赋予short是不可以的,需要加强制转换:改成s=(short)(s+5);就可以了;但是当s+5的值超过了short的范围会损失精度哦。至于s+=5;其实这条代码等价于s=(short)(s+5);默认带有强制转换的。涉及到的是类型转换的问题。
作者: binarycoc    时间: 2015-8-25 23:23
1楼解释的蛮好
作者: 何时指点江山    时间: 2015-8-26 00:10
楼上解释的很到位了
作者: klamo    时间: 2015-8-26 08:50
有变量就不行
作者: rhyhhg5    时间: 2015-8-26 11:10
MilesMatheson 发表于 2015-8-25 22:28
s=s+5;这条代码中,s+5 之后得到的结果自动转为int型,然而将int型数据赋予short是不可以的,需要加强制转 ...

什么s+5的结果会自动转化为int类型,就是这里想不通
作者: MilesMatheson    时间: 2015-8-27 01:30
这是这个语言底层自动执行的,你只需要记住就好了;
作者: 爱晴    时间: 2015-8-27 01:47
rhyhhg5 发表于 2015-8-26 11:10
什么s+5的结果会自动转化为int类型,就是这里想不通

s+5转换成int类型是属于自动转换,因s 定义的是short类型,而数字5系统默认的是int类型,所以s+5默认转换成int类型。 char/short——>int——>float/unsigned——>long——>double   记住这个就行
作者: 齐伟超    时间: 2015-8-27 08:32
rhyhhg5 发表于 2015-8-26 11:10
什么s+5的结果会自动转化为int类型,就是这里想不通

自动类型提升,小容量(short   2个字节)的会向大容量(int   4个字节)的自动转,大容量向小容量需强转,扩展赋值运算符+=,隐含强制转换   刘意的视频应该讲的更详细    你可以去看
  
作者: DUKEMAN    时间: 2015-8-27 09:00
请short精度啊
作者: 淡忘初学者    时间: 2015-8-27 10:36
MilesMatheson 发表于 2015-8-25 22:28
s=s+5;这条代码中,s+5 之后得到的结果自动转为int型,然而将int型数据赋予short是不可以的,需要加强制转 ...

回答得漂亮
作者: 肖天长    时间: 2015-8-27 11:45
一楼正解
作者: Melody1260    时间: 2015-8-27 22:41
终于碰见会做的题,结果楼上全回复了。
作者: michael_wlq    时间: 2015-8-27 23:07
楼上说的也是我想说的
作者: 血马雄风    时间: 2015-8-28 10:26
涉及类型转换的问题




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