黑马程序员技术交流社区

标题: +=运算符? [打印本页]

作者: 黑马薛有义    时间: 2011-7-19 11:30
标题: +=运算符?
看了张老师面试大全,里面有这样一个面试题short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
老师的讲解理解了,现在的问题是java中对+=、*=等等这些运算符是一种什么样的机制?
作者: 毕仁杰    时间: 2011-7-19 11:50
标题: 回复 楼主 的帖子
因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过,即需要进行强制转换。      而后面的那个不会发生类型的提升,只是在其基础上加了一个1,还是short型,所以不会出错。
[ 本帖最后由 毕仁杰 于 2011-07-19  11:52 编辑 ]
作者: 匿名    时间: 2011-7-19 12:07
我认为出现+=,*=这些运算符一是为了简化格式书写,二就是避免计算机对数据进行不必要的类型提升。希望对你有用。
作者: 匿名    时间: 2011-7-19 12:12
标题: 回复 楼主 的帖子
关键不是+=、*=,而是数字1默认就是int类型的,所以int与short运算,肯定超大范围转换。类似的,小数如3.5默认的double类型的,要看成float类型的要加f或F(3.5f、3.5F)。它也有类似的问题。
作者: 匿名    时间: 2011-7-19 12:24
标题: 回复 楼主 的帖子
应该是这样的,
short s1 = 1; s1 += 1;

short s1 = 1; s1 = s1 +1;
是一样的
出错是因为
s1 = s1 + 1 中,等式右边s1+1会隐性称为一个int型
而等式左边又是short型,int型的数是不能直接给shot型的变量赋值的
要进行强制类型转换
作者: 归金博    时间: 2011-7-19 12:39
首先short s1 = 1将s1声明为short型,1默认为int,所以s1 = s1 + 1相当于把int赋值给了short,所以不行,可以强制类型转换成short;而 s1 += 1属于复合赋值运算,系统会自动将类型转换成=左边的类型,所以不报错。




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