被java语法混淆[重复]
Posted
技术标签:
【中文标题】被java语法混淆[重复]【英文标题】:Confused by java syntax [duplicate] 【发布时间】:2013-08-02 01:53:04 【问题描述】:谁能解释这个|=
是什么意思?喜欢这里:
noti.flags |= Notification.FLAG_AUTO_CANCEL;
【问题讨论】:
【参考方案1】:是Bitwise Or运算符的赋值版本,即:
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;
bitwise 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
,并且它们都位于不同的位置。
【讨论】:
【参考方案2】:您发布的这个表达式(可能)做了什么的简单解释:
每个整数类型都表示为位列表。所以noti.flags
有类似00101
的表示。 noti.flags
变量似乎是标志的表示,即类的选项。这意味着每个位都意味着其他东西,并且可以使类以不同的方式运行,具体取决于该位是 0 还是 1。
|
运算符是按位或运算符。 |=
是按位或运算符的赋值版本。 (行为就像+=
)
现在Notification.FLAG_AUTO_CANCEL
是单个标志的常量,可能是10000
。
如果将按位或 (|
) 应用于 Notification.FLAG_AUTO_CANCEL
和 noti.flags
(00101 | 10000
),则结果将为 10101
。此结果现在分配给 noti.flags。
您发布的表达式基本上只是为标志变量noti.flags
设置了一个名为FLAG_AUTO_CANCEL
的新标志。
【讨论】:
【参考方案3】:这是一个用作赋值的按位或运算符
noti.flags |= Notification.FLAG_AUTO_CANCEL;
是一样的
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL
【讨论】:
【参考方案4】:这是语句的简短表示:
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;
【讨论】:
以上是关于被java语法混淆[重复]的主要内容,如果未能解决你的问题,请参考以下文章