
复合赋值运算符 += 到底怎么运算的?
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);所以结果是没问题的。
各位是否明白了这个规则呢?请看以下两段代码,您是否能正确地说出答案呢?
下面的代码输出什么值?
下面的代码有错吗?
有什么错?
有什么错?
此题乍一看,这两段代码貌似没有什么区别,但是它们的执行结果是不一样的。
结果是第一段代码会出错,第二段代码不会出错。
第一段代码的分析:
这段代码的第二句(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);所以结果是没问题的。
各位是否明白了这个规则呢?请看以下两段代码,您是否能正确地说出答案呢?
下面的代码输出什么值?
下面的代码有错吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询