Java提供特殊的速记赋值来简化某些赋值语句的编码.让我们从一个示例开始介绍.使用Java的速记赋值可将赋值语句:
x = x + 10;
写为:
x += 10;
运算符+=让编译器将x加10的值赋给x.这里还有一个示例.下面的两条语句是等效的,这两条语句都将x减100后的值赋给x.
x = x - 100; x -= 100;
问 : 既然在某些情况下,短路运算符比对应的普通运算符效率更高,Java为何还要提供普通的AND和OR运算符呢?
答 : 某些情况下,会出现副作用,所以需要同时计算AND或OR运算的两个操作数,如下所示:
public static void main(String args[]) { int i; i = 0; System.out.println("i = "+i); if(false & ( ++i < 100)) { } System.out.println("i = "+i); if(false && ( ++i < 100)) { } System.out.println("i = "+i); }
输出
i = 0 i = 1 i = 1
在第一个if语句中,无论if语句真假与否,i都会自增.而在使用短路运算符时,当第一个操作数为false时,变量i就不会自增.这里的教训就是,如果代码希望计算AND或OR运算符右侧的操作数,就必须使用Java的非短路逻辑运算符.
速记赋值可以用于Java的所有二元运算符(即需要两个操作数的运算符).速记赋值的基本形式为:
var op = expression;
因此,算术和逻辑赋值运算符的速记形式如下所示:
+=,-=,*=,/=,%=,&=,|=,^=
由于这些运算符把运算和赋值组合在一起,因此称为”组合赋值运算符”
使用组合赋值运算符有两个优点.第一,他们比普通表示法更简洁.第二,Java运行时系统实现他们的效率更高.由于这些原因,在编写专业的Java程序中的经常会看到这些组合赋值运算.