首页 > 代码库 > 复合赋值运算符 += 到底怎么运算的?
复合赋值运算符 += 到底怎么运算的?
题目:
short s1 = 1; s1 = s1 + 1;
有什么错?
short s1 = 1; s1 +=1;
有什么错?
此题咋一看,这两段代码貌似没有什么区别,但是它们的执行结果是不一样的。
结果是第一段代码会出错,第二段代码不会出错。
第一段代码的分析:
这段代码的第二句(s1=s1+1)就是简单的两个数字相加,结果赋值给第一个变量。
此时运算结果的数据类型由以下规则依次决定:
1,如果参与相加运算的表达式或数字有double类型,则结果是double类型
2,如果参与相加运算的表达式或数字有float类型,则结果是float类型
3,如果参与相加运算的表达式或数字有long类型,则结果是long类型
4,如果参与相加运算的表达式或数字没有以上3中数据类型,则结果是一律是int类型
按照这个规则,s1=s1+1;那么最终的运算结果应该是int,所以赋值给short类型的s1会出错。
第二段代码的分析:
类似于 num1 += num2 这样的形式的复合赋值表达式,,实际上等同于(num1的类型)(num1+num2),也就是将两个数相加之后的结果强制转型为赋值运算符左边操作数的数据类型。唯一的不同点就是num1只会计算一次,所以理论上复合赋值运算符的效率更高。
s1+=1;就会等同与 s1=(short)(s1+1);所以结果是没问题的。
各位是否明白了这个规则呢?请看以下两段代码,您是否能正确的说出答案呢?
下面的代码输出什么值?
short x = 3; x += 4.6; System.out.print(x);
下面的代码有错吗?
int i = 5; long j = 8; i = i + j; i += j;
本文出自 “老谭” 博客,请务必保留此出处http://tanlan.blog.51cto.com/3450625/1575936
复合赋值运算符 += 到底怎么运算的?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。