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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 顾传文 中级黑马   /  2013-2-23 10:18  /  1844 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 顾传文 于 2013-3-12 09:16 编辑

short s = 3;
s =  s+5;/编译通过
s += 5;//编译不通过
“+=”会自动转型,那么它是先将5转成short类型的再相加,还是等相加后变成int类型的再强转呢?

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

4 个回复

倒序浏览
s =  s+5;/编译不通过
s += 5;//编译通过
“+=”会自动转型,先将5转成short类型的再相加。

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

回复 使用道具 举报
这个问题貌似涉及到了一个左值和右值的概念。

简单点说吧。在运算时,以左边的值为准则,比如:

  1. short s = 3;
  2. s =  s+5;/编译通过,这一句,
  3. 、s+5,这个s在左边,它又是short类型,所以自动的把5转成了short型,并与s相加

  4. 下一步:算等号两边,
  5. s = s+5;
  6. 前面分析了s+5它的运算结果是short类型的,而等号左边的s也是short类型的,把short类型的值赋给short类型的变量,通过是理所应当的嘛
复制代码
下面一句同理了,但它报错的关键就在于,编译器的检测方式,它是先接侧左边s,好的是一个short类型的,在检测右边5,哦,int类型的,

再一比较:把int 类型的值赋给short,嗯?然后就给你报错了!呵呵!

评分

参与人数 1技术分 +1 黑马币 +9 收起 理由
李培根 + 1 + 9 赞一个!

查看全部评分

回复 使用道具 举报
低位到高位运算时,会自动强转的.short与5运算时,
过程是这样的s=s+(int)5;
而short低于int型,会损失精度,如果那不是5而是65536,那short就溢出了.
而s+=5;是一步操作.强转的动作系统帮你完成了.所以不会抱错

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

回复 使用道具 举报
short s = 3;
s = s + 5;
//编译不通过,因为s与5进行操作的时候,s首先会自动提升为整型,然后与5相加,得到的数仍然是整型的,高精度的转成低精度的需要强制类型转换才能转成short
s+=5;//此句话是编译通过的,不等价与s=s+5;它的意思是类型系统会自动帮你转换。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马