“| =”是什么意思? (pipe道平等运营商)

我尝试使用Googlesearch和堆栈溢出进行search,但没有显示任何结果。 我在开源库代码中看到了这个:

Notification notification = new Notification(icon, tickerText, when); notification.defaults |= Notification.DEFAULT_SOUND; notification.defaults |= Notification.DEFAULT_VIBRATE; 

“| =”( pipe equal operator )是什么意思?

|=读取方式与+=相同。

 notification.defaults |= Notification.DEFAULT_SOUND; 

是相同的

 notification.defaults = notification.defaults | Notification.DEFAULT_SOUND; 

在哪里| 是按位OR运算符。

所有操作符都在这里引用。

使用按位运算符是因为频繁地,这些常数使int能够携带标志。

如果你看看这些常数,你会看到他们是在两个权力:

 public static final int DEFAULT_SOUND = 1; public static final int DEFAULT_VIBRATE = 2; // is the same than 1<<1 or 10 in binary public static final int DEFAULT_LIGHTS = 4; // is the same than 1<<2 or 100 in binary 

所以你可以使用按位OR来添加标志

 int myFlags = DEFAULT_SOUND | DEFAULT_VIBRATE; // same as 001 | 010, producing 011 

所以

 myFlags |= DEFAULT_LIGHTS; 

只是意味着我们添加一个标志。

而对称地,我们testing一个标志是使用&设置的:

 boolean hasVibrate = (DEFAULT_VIBRATE & myFlags) != 0; 

你的问题已经得到了充分的回答。 但可能是我的回答更多地帮助您了解二元运算符的种类。

我正在为位运算符写表格:
以下有效:

 ---------------------------------------------------------------------------------------- Operator Description Example ---------------------------------------------------------------------------------------- |= bitwise inclusive OR and assignment operator C |= 2 is same as C = C | 2 ^= bitwise exclusive OR and assignment operator C ^= 2 is same as C = C ^ 2 &= Bitwise AND assignment operator C &= 2 is same as C = C & 2 <<= Left shift AND assignment operator C <<= 2 is same as C = C << 2 >>= Right shift AND assignment operator C >>= 2 is same as C = C >> 2 ---------------------------------------------------------------------------------------- 

注意所有操作符都是二元操作符

另外注意:( 以下几点我想添加我的答案)

  • >>>是Java中的位运算符,称为无符号移位
    >>>=不是Java中的运算符。 >>> =运算符

  • ~是补码位, 0 to 1 and 1 to 0 (一元运算符),但~=不是运算符。

  • 另外! 称为逻辑NOT运算符,但!=检查两个操作数的值是否相等,如果值不相等则条件成立。 例如(A != B) is true 。 如果A=!B意味着如果Btrue那么A变成false (如果Bfalse那么A变成true )。

旁注: | 不是所谓的pipe道,而是其所谓的OR,pipe道是shell的术语转移到下一个进程..

这是一个缩写:

 notification.defaults = notification.defaults | Notification.DEFAULT_SOUND; 

| 是一个按位或。

| 是按位还是运算符,并且正在像+=一样应用。

我正在寻找一个关于Groovy中什么的答案,虽然上面的答案是正确的,但是他们并没有帮我理解我正在看的一段代码。

特别是,当应用于布尔variables“| =”时,它将在第一次遇到真值expression式时将其设置为TRUE,并将对所有后续调用保持其TRUE值。 像闩锁一样。

这里有一个简单的例子:

 groovy> boolean result groovy> //------------ groovy> println result //<-- False by default groovy> println result |= false groovy> println result |= true //<-- set to True and latched on to it groovy> println result |= false 

输出:

 false false true true 

编辑 :为什么这有用?

考虑一个情况,你想知道是否有任何东西在各种对象上发生了变化,如果是的话,通知一些变化。 所以,你会设置一个hasChanges布尔值,并将其设置为|= diff (a,b) ,然后设置为|= dif(b,c)等等。下面是一个简单的例子:

 groovy> boolean hasChanges, a, b, c, d groovy> diff = {x,y -> x!=y} groovy> hasChanges |= diff(a,b) groovy> hasChanges |= diff(b,c) groovy> hasChanges |= diff(true,false) groovy> hasChanges |= diff(c,d) groovy> hasChanges Result: true 

注意:|| =不存在。 (逻辑或)你可以使用

 y= y || expr; // expr is NOT evaluated if y==true 

要么

 y = expr ? true : y; // expr is always evaluated.