Java运算符:| =按位OR并指定示例

Rac*_*hel 20 java bit-manipulation operators variable-assignment

我只是通过有人编写的代码,我看到了|=用法,查看Java运算符,它建议按位或分配操作,任何人都可以解释并给我一个例子吗?

这是读取它的代码:

    for (String search : textSearch.getValue())
         matches |= field.contains(search);
Run Code Online (Sandbox Code Playgroud)

Gra*_*and 30

a |= b;
Run Code Online (Sandbox Code Playgroud)

是相同的

a = (a | b);
Run Code Online (Sandbox Code Playgroud)

它计算两个操作数的按位OR,并将结果赋给左操作数.

要解释您的示例代码:

for (String search : textSearch.getValue())
    matches |= field.contains(search);
Run Code Online (Sandbox Code Playgroud)

我认为matchesboolean; 这意味着按位运算符的行为与逻辑运算符相同.

在循环的每次迭代中,它OR是当前matches返回的值的当前值field.contains().true如果它已经为真,或者field.contains()返回true ,则具有将其设置为的效果.

因此,它计算整个循环中的任何调用field.contains()是否已返回true.

  • 还应该注意,如果`contains()`没有副作用,这是相当低效的.至少添加一个`if(matches){break; 在循环内部会更好......(虽然我认为`getValue()`可能会返回这么少的搜索,以至于它不会产生显着的差异......) (3认同)

Aln*_*tak 10

a |= b 是相同的 a = (a | b)

布尔变量

boolean上下文中,它意味着:

if (b) {
    a = true;
}
Run Code Online (Sandbox Code Playgroud)

也就是说,如果b是真,那么a将是真的,否则a将是未修改的.

按位操作

在一个有点明智的上下文中,它意味着所设置的每个二进制位b都将被设置a.明确的位b将不会被修改a.

因此,如果设置了位0 b,则a根据以下示例,它也将设置为:

  • 这将设置整数的底部位:

    a |= 0x01

  • 这将清除底部位:

    a &= ~0x01

  • 这将切换底部位:

    a ^= 0x01;