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

题目:

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值