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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© daniel031699 中级黑马   /  2016-5-21 00:35  /  851 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s=3;

s+=4;(2)
s=s+4;(3为什么(2)编译能通过,而(3)提示编译错误。

11 个回复

倒序浏览
话说 不就是一个类型强制转换的问题吗  搞得好高深的样子
回复 使用道具 举报
z736886202 发表于 2016-5-21 00:48
话说 不就是一个类型强制转换的问题吗  搞得好高深的样子

能给解释一下为啥不?我不太懂
回复 使用道具 举报
z736886202 发表于 2016-5-21 00:48
话说 不就是一个类型强制转换的问题吗  搞得好高深的样子

哈哈哈哈!
回复 使用道具 举报
short s=3;    //s是短整型

s+=4;          //+=隐含了强制类型转换,s=7,不会报错。
s=s+4;       //s+4结果为int类型,s是短整型,运算后的结果是把大的数据类型转换成小的数据类型,会造成精度缺失。
回复 使用道具 举报 1 0
这里涉及到一个强制转换的问题,4属于整数类型,而整数型的默认类型是int,它比short要大一些,就好比,如果让蛇(int类型)吃一个老鼠(short类型)那很容易,可是让老鼠吃蛇就需要想办法了。s = s+4这种形式是把short提升为了int类型,让老鼠去吃蛇了,所以系统不认识,如果你想运行成功就要在s = s+4之前写上你要提升的类型,就是这样
s = (short)s+4, 这样的话系统就知道这是short类型了
而 += 这个符号呢是扩展运算符,比如a += b,意思就是a = a+b,系统是可以主动识别这种运算方式的,说的官方一点就是,系统底层默认强制转型,就不需要你自己去写你要转的类型了,系统帮你转了
ps:你这个题是小的转大的,所以才会有这种问题,如果是int转short(大的转小的)那就直接转就可以了
回复 使用道具 举报 1 0
yiyajing 发表于 2016-5-23 00:28
这里涉及到一个强制转换的问题,4属于整数类型,而整数型的默认类型是int,它比short要大一些,就好比,如果 ...

嗯嗯  看懂了
回复 使用道具 举报
+= 隐含了强制转换,就这个了
回复 使用道具 举报 1 0
daniel031699 发表于 2016-5-21 01:01
能给解释一下为啥不?我不太懂

强制类型转换   int --->short,char,byte   需要强转加(需要的类型)   也可以使用(+=   -+   *=   \= )这些运算符都包含有强制转换 不需要加()     byte, char.short------> int ,long;    folat---->double   这些自动类型提升的
  有个顺序的记下就行了,byte,short,char --> int --> long --> float --> double    记这个顺序  从byte到double是自动类型提升  倒过来就需要强制类型转换了
回复 使用道具 举报
z736886202 发表于 2016-5-23 23:14
强制类型转换   int --->short,char,byte   需要强转加(需要的类型)   也可以使用(+=   -+   *=   \= )这 ...

嗯!!!!!!!!
回复 使用道具 举报
类型强制转换的问题
回复 使用道具 举报
看懂了,谢谢,受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马