【Java语法解析】a += b与a = a + b有什么不同?

本文探讨了Java中a += b与a = a + b两种表达式的区别,主要涉及隐式类型转换和求值次数的不同。在隐式类型转换上,a += b允许隐式转换,而a = a + b可能导致编译错误。在求值次数方面,当a是数组引用时,a += b仅计算一次,而a = a + b会计算两次。文章还通过知识扩展部分深入讨论了这一主题。
摘要由CSDN通过智能技术生成


语法话题

本期的话题如下:

在Java中,a += b与a = a + b两条语句有什么不同?

对于Java初学者来说,可能认为二者是等价的,但实际上,二者还是有一定区别的。

这里,我们使用运算符+与+=来举例,不过,这种区别也适用于更通用的情况,可以认为是:a op= b与a = a op b的区别,其中op=可以是所有的复合赋值运算符:

+=  -=  *=  /=  %=  <<=  >>=  >>>=  &=  ^=  |=

区别1——隐式类型转换

设右侧操作数(表达式a + b)的类型为S,左侧操作数a的类型(目标类型)为T,当S与T赋值不兼容时:

  • 对于a += b,能够执行一个隐式的类型转换,将a + b的结果类型(S)转换为a的类型(T)。
  • 对于a = a + b,则不会执行隐式类型转换,而是产生编译错误。

程序示例如下:

package test;

public class Test {
   
	public static void main(String[] args) {
   
		short a = 0;
		int b = 1;
		// 可以。能够自动完成隐式转换。
		// 相当于执行a = (short)(a + b)
		a += b;
		// 不可以,会产生编译错误。
		// a = a + b;
	}
}

区别2——求值次数

当左侧操作数a是通过数组引用来访问元素时(数组访问表达式),例如,x[0],其中,x为数组引用,0为元素索引,此时x[0](整体)就是操作数a:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值