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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

xuqangxing

中级黑马

  • 黑马币:0

  • 帖子:51

  • 精华:0

© xuqangxing 中级黑马   /  2013-5-21 12:01  /  1663 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xuqangxing 于 2013-5-21 14:42 编辑

short s = 3;
s=s+2;//会报错
s=(short)(s+2);//编译通过,s=5
s+=2;  //编译通过,s=5    为什呢?
s+=2相当于s=s+2,为什么s=s+2会报错而s+=2不会呢?
  

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

10 个回复

倒序浏览
s=s+2改成  s+=2试下
回复 使用道具 举报
s+=2里面已经有了强制转换的过程,是一步完成的。 s= (short)(s+2),是第一步s+2,第二步强制转换。
回复 使用道具 举报
同意楼上的观点。。。。。。楼主可以去看下强制转换相关内容
回复 使用道具 举报
2是int类型,要转换
回复 使用道具 举报
s+=2; 是将S自加2, 相当于 s++; s++;   这个过程不需要强制转换的吧,         我们可以理解为s=s+2,并不完全一样的    ,而s=s+2;是将 表达式S+2的值 赋给S  ,表达式在赋值运算时需要赋值号左右的数据类型 一致, 而s+2在运算时 想将赋值号右边的S转换成了int类型进行3+2的运算,结果5为int,再付给左边 精度低的short时 就必须强制转换了            以上均属个人观点和理解  。。。大家慎重考虑哦!

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在自加的过程中  加的是与本身类型相同的 2;
回复 使用道具 举报
Java编译器认为一个像“2”这样的直接数是一个int型。Java的自动类型转换是一个占用空间少的类型可以自动转换成占用空间大的类型,反之则必须强制类型转换,否则报错。“s + 2”这个表达式因为是short型和int型相加,因此自动转换成了int型,此时再用“s = s + 2”赋值给一个short型而没有强制类型转换那么自然报错。对于“+=”操作,系统会自动执行类型转换操作,等价于s=(short)s+2。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 非常好

查看全部评分

回复 使用道具 举报
1、 S=S+2报错是因为int类型的数据向short类型转换需进行强制性转换,否则会损失数据类型的精度。所以编译会报错。。
2、 S+=2 是因为+=是属于JAVA内部定义的运算符号,所以系统会自行进行数据类型转换操作。。
  浏览了一下帖子,跟棒棒同鞋的想法不谋而合。。
回复 使用道具 举报
年轻的棒棒 发表于 2013-5-21 13:05
Java编译器认为一个像“2”这样的直接数是一个int型。Java的自动类型转换是一个占用空间少的类型可以自动转 ...

谢谢你的认真回答   
回复 使用道具 举报
a724228803 发表于 2013-5-21 12:52
s+=2; 是将S自加2, 相当于 s++; s++;   这个过程不需要强制转换的吧,         我们可以理解为s=s+2,并不 ...

谢谢哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马