“| =”是什么意思?(管道等运算符)

我尝试使用Google搜索和Stack Overflow搜索,但它没有显示任何结果。我在开源库代码中看到了这个:


Notification notification = new Notification(icon, tickerText, when);

notification.defaults |= Notification.DEFAULT_SOUND;

notification.defaults |= Notification.DEFAULT_VIBRATE;

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


慕娘9325324
浏览 499回答 3
3回答

宝慕林4294392

|=读取的方式与+=。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 binarypublic 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;只是意味着我们添加一个标志。并且对称地,我们使用&以下方法测试标志:boolean hasVibrate = (DEFAULT_VIBRATE & myFlags) != 0;

凤凰求蛊

我正在寻找关于|=Groovy中的内容的答案,尽管上面的答案是正确的,但它们并没有帮助我理解我正在查看的特定代码片段。特别是,当应用于布尔变量时,“| =”将在第一次遇到右侧的truthy表达式时将其设置为TRUE,并且对于所有| =后续调用将保持其TRUE值。像一个闩锁。这是一个简单的例子:groovy> boolean result&nbsp;&nbsp;groovy> //------------&nbsp;groovy> println result&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//<-- False by defaultgroovy> println result |= false&nbsp;groovy> println result |= true&nbsp; &nbsp;//<-- set to True and latched on to itgroovy> println result |= false&nbsp;输出:falsefalsetruetrue编辑:为什么这有用?考虑一种情况,您想知道各种对象上是否有任何更改,如果是,请通知其中一个更改。所以,你要设置一个hasChanges布尔值并将其设置为&nbsp; |= diff (a,b)然后|= dif(b,c)等。这是一个简短的例子:groovy> boolean hasChanges, a, b, c, d&nbsp;groovy> diff = {x,y -> x!=y}&nbsp;&nbsp;groovy> hasChanges |= diff(a,b)&nbsp;groovy> hasChanges |= diff(b,c)&nbsp;groovy> hasChanges |= diff(true,false)&nbsp;groovy> hasChanges |= diff(c,d)&nbsp;groovy> hasChanges&nbsp;Result: true
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android