假设
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/