java中的| =运算符,这段代码有什么作用?

tit*_*geo 1 java bit-manipulation

int equal = 0;
for (int i = 0; i < a.length(); i++) {
   equal |= a.charAt(i) ^ b.charAt(i);
}
return equal == 0;
Run Code Online (Sandbox Code Playgroud)

我理解管道和XOR运算符但是在|=做什么?

Rah*_*thi 5

它类似于+ =.见这里的表格

|=        bitwise inclusive OR and assignment operator   C |= 2 is same as C = C | 2
Run Code Online (Sandbox Code Playgroud)

所以它相当于将代码编写为:

equal = equal | a.charAt(i) ^ b.charAt(i)
Run Code Online (Sandbox Code Playgroud)

另外正如luk2302正确指出的那样,那里(按位异或)^ 优先于(按位包含OR),|所以你可以把它包含在括号内,如下所示:

equal = equal | (a.charAt(i) ^ b.charAt(i))
Run Code Online (Sandbox Code Playgroud)

  • *附加说明*:请注意`^`在`|`之前得到评估,因此语句实际上是相同的.如果您不确定这些二元运算符的[运算符优先级](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)是什么,我建议在它周围添加`()` `equal = equal | (a.charAt(i)^ b.charAt(i))`让每个人都能理解. (3认同)