int equal = 0;
for (int i = 0; i < a.length(); i++) {
equal |= a.charAt(i) ^ b.charAt(i);
}
return equal == 0;
我理解管道和XOR运算符但是|=
在做什么?
答案 0 :(得分:5)
类似于+ =。见表here
|= bitwise inclusive OR and assignment operator C |= 2 is same as C = C | 2
所以它等同于将代码编写为:
equal = equal | a.charAt(i) ^ b.charAt(i)
同样正如luk2302指出的那样,那里(按位异或)^
has higher precedence over(按位包含OR)|
所以你可以把它包含在括号内,如下所示: / p>
equal = equal | (a.charAt(i) ^ b.charAt(i))
答案 1 :(得分:1)
此代码 似乎是一个很好的例子,说明为什么不应该聘请goofballs作为程序员。
以下是对代码的解释:
or-equals运算符在左手参数和右手参数之间执行按位或运算,然后将结果赋给左手参数。这意味着这句话:
left |= right
执行与此声明相同的工作:
left = (left | right)
goofballs经常重新发明现有的功能并且做得很差。从这个意义上讲,上面的代码是成功的;它既重新发明了现有的功能又做得非常糟糕。
此代码表现出一些令人不安的无能行为
不是白痴的程序员会使用 String.equals 方法执行字符串比较操作,或者,如果他们不仅仅是勉强称职,他们会使用像Apache Commons Lang这样的实用程序StringUtils执行空安全比较。
答案 2 :(得分:0)
这是一个简单的伴侣。以下几行做同样的事情:
equal |= a.charAt(i) ^ b.charAt(i);
equal = equal | (a.charAt(i) ^ b.charAt(i));