复合赋值运算符 += 到底怎么运算的?

时间:2022-10-13 19:18:16

题目:

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