被java语法困惑

时间:2013-08-01 08:37:48

标签: java android syntax

任何人都可以解释这个|=的含义吗?就像在这里:

   noti.flags |= Notification.FLAG_AUTO_CANCEL;

4 个答案:

答案 0 :(得分:4)

这是声明的简短陈述:

noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;

答案 1 :(得分:2)

它是用作赋值的按位OR运算符

noti.flags |= Notification.FLAG_AUTO_CANCEL;

相同
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL

答案 2 :(得分:2)

这是Bitwise Or运算符的赋值版本,即:

 noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;

bitwise or执行包含按位OR运算:

10110 bitwise or
01100
-----------------
11110

来自源代码:

  

要按位进入标志字段,如果通知应该设置      应该在用户点击时取消。

public static final int FLAG_AUTO_CANCEL = 0x00000010;

对于数字16,这是hexadecimal。如果你想知道为什么我们使用这些类型的标志,那是因为其他标志会有表示:

 0x00000020
 0x00000040
 0x00000080

每一次,我们都会上升2的幂。将其转换为二进制,我们得到:

 00010000
 00100000
 01000000
 10000000

因此,我们可以使用bitwise or来确定哪些标志存在,因为每个标志只包含一个1,并且它们都位于不同的位置。

答案 3 :(得分:1)

简单解释你发布的这个表达式(可能):

每个整数类型都表示为位列表。因此noti.flags代表00101noti.flags变量似乎是标志的表示,即类的选项。这意味着每一位都意味着别的东西,并且可以使类以不同的方式运行,具体取决于该位是0还是1.

|运算符是按位OR运算符。 |=是按位OR运算符的赋值版本。 (表现得像+=

现在Notification.FLAG_AUTO_CANCEL是单个标志的常量,可能是10000。 如果您将按位OR(|)应用于Notification.FLAG_AUTO_CANCELnoti.flags00101 | 10000),则结果将为10101。此结果现已分配给noti.flags。

您发布的表达式基本上只是为标志变量FLAG_AUTO_CANCEL设置了一个名为noti.flags的新标志。