假设

boolean a = false;

我想知道是否在做:
a &= b;

相当于
a = a && b; //logical AND, a is false hence b is not evaluated.

或另一方面
a = a & b; //Bitwise AND. Both a and b are evaluated.

最佳答案

来自Java语言规范-15.26.2 Compound Assignment Operators



因此a &= b;等同于a = a & b;

(在某些用法中,类型转换对结果有所影响,但在这种情况下,b必须为boolean,而类型转换不执行任何操作。)

而且,根据记录,a &&= b;不是有效的Java。没有&&=运算符。

实际上,a = a & b;a = a && b;之间的语义差异很小。 (如果b是变量或常量,则两个版本的结果都将相同。当b是具有副作用的子表达式时,只有语义上的差异。在&的情况下,总是发生副作用在&&情况下,它的发生取决于a的值。)

在性能方面,需要在评估b的成本,测试和a值的分支成本以及避免不必要地分配a的潜在节省之间进行权衡。这种分析不是简单明了的,但是除非计算b的成本不平凡,否则两个版本之间的性能差异将太小,不值得考虑。

关于java - Java&=运算符是否适用&或&&?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3907082/

10-11 06:50
查看更多