我尝试使用Google搜索和堆栈溢出进行搜索,但没有显示任何结果。我已经在OpenSource库代码中看到了这一点:
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;
在哪里|
是位或操作员。
所有操作员被引用这里。
使用了一个角操作员,因为这些常数频繁地使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
因此,您可以使用位或添加标志
int myFlags = DEFAULT_SOUND | DEFAULT_VIBRATE; // same as 001 | 010, producing 011
所以
myFlags |= DEFAULT_LIGHTS;
只是意味着我们添加一个标志。
对称地,我们使用&
:
boolean hasVibrate = (DEFAULT_VIBRATE & myFlags) != 0;