黑马程序员技术交流社区

标题: 数据类型的问题 [打印本页]

作者: xuqangxing    时间: 2013-5-21 12:01
标题: 数据类型的问题
本帖最后由 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不会呢?
  

作者: 捊洿    时间: 2013-5-21 12:04
s=s+2改成  s+=2试下
作者: 王靖远    时间: 2013-5-21 12:09
s+=2里面已经有了强制转换的过程,是一步完成的。 s= (short)(s+2),是第一步s+2,第二步强制转换。
作者: 陈进    时间: 2013-5-21 12:15
同意楼上的观点。。。。。。楼主可以去看下强制转换相关内容
作者: 画饼    时间: 2013-5-21 12:20
2是int类型,要转换
作者: a724228803    时间: 2013-5-21 12:52
s+=2; 是将S自加2, 相当于 s++; s++;   这个过程不需要强制转换的吧,         我们可以理解为s=s+2,并不完全一样的    ,而s=s+2;是将 表达式S+2的值 赋给S  ,表达式在赋值运算时需要赋值号左右的数据类型 一致, 而s+2在运算时 想将赋值号右边的S转换成了int类型进行3+2的运算,结果5为int,再付给左边 精度低的short时 就必须强制转换了            以上均属个人观点和理解  。。。大家慎重考虑哦!
作者: a724228803    时间: 2013-5-21 13:00
在自加的过程中  加的是与本身类型相同的 2;
作者: 年轻的棒棒    时间: 2013-5-21 13:05
Java编译器认为一个像“2”这样的直接数是一个int型。Java的自动类型转换是一个占用空间少的类型可以自动转换成占用空间大的类型,反之则必须强制类型转换,否则报错。“s + 2”这个表达式因为是short型和int型相加,因此自动转换成了int型,此时再用“s = s + 2”赋值给一个short型而没有强制类型转换那么自然报错。对于“+=”操作,系统会自动执行类型转换操作,等价于s=(short)s+2。
作者: 周中波    时间: 2013-5-21 14:23
1、 S=S+2报错是因为int类型的数据向short类型转换需进行强制性转换,否则会损失数据类型的精度。所以编译会报错。。
2、 S+=2 是因为+=是属于JAVA内部定义的运算符号,所以系统会自行进行数据类型转换操作。。
  浏览了一下帖子,跟棒棒同鞋的想法不谋而合。。
作者: xuqangxing    时间: 2013-5-21 14:47
年轻的棒棒 发表于 2013-5-21 13:05
Java编译器认为一个像“2”这样的直接数是一个int型。Java的自动类型转换是一个占用空间少的类型可以自动转 ...

谢谢你的认真回答   
作者: xuqangxing    时间: 2013-5-21 14:47
a724228803 发表于 2013-5-21 12:52
s+=2; 是将S自加2, 相当于 s++; s++;   这个过程不需要强制转换的吧,         我们可以理解为s=s+2,并不 ...

谢谢哦




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