为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕娘9325324 2019-09-19 15:27:30
我尝试使用Google搜索和Stack Overflow搜索,但它没有显示任何结果。我在开源库代码中看到了这个:Notification notification = new Notification(icon, tickerText, when);notification.defaults |= Notification.DEFAULT_SOUND;notification.defaults |= Notification.DEFAULT_VIBRATE;“| =”(pipe equal operator)是什么意思?
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

|=读取的方式与+=。


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;

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


并且对称地,我们使用&以下方法测试标志:


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


查看完整回答
反对 回复 2019-09-19
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

我正在寻找关于|=Groovy中的内容的答案,尽管上面的答案是正确的,但它们并没有帮助我理解我正在查看的特定代码片段。


特别是,当应用于布尔变量时,“| =”将在第一次遇到右侧的truthy表达式时将其设置为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


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 498 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信