表达“m |= Modifier.PUBLIC”是啥意思,为啥要这样做? [复制]
Posted
技术标签:
【中文标题】表达“m |= Modifier.PUBLIC”是啥意思,为啥要这样做? [复制]【英文标题】:What dose the expression "m |= Modifier.PUBLIC" mean and why do things in that way? [duplicate]表达“m |= Modifier.PUBLIC”是什么意思,为什么要这样做? [复制] 【发布时间】:2016-09-11 02:48:17 【问题描述】:我正在学习反射,我发现了一些看起来像这样的 sn-p:
private static int modifierFromString(String s)
int m = 0x0;
if ("public".equals(s)) m |= Modifier.PUBLIC;
else if ("protected".equals(s)) m |= Modifier.PROTECTED;
else if ("private".equals(s)) m |= Modifier.PRIVATE;
else if ("static".equals(s)) m |= Modifier.STATIC;
else if ("final".equals(s)) m |= Modifier.FINAL;
else if ("transient".equals(s)) m |= Modifier.TRANSIENT;
else if ("volatile".equals(s)) m |= Modifier.VOLATILE;
return m;
我很困惑,m |= Modifier.PUBLIC
是什么意思,我可以使用m = Modifier.PUBLIC
吗?
【问题讨论】:
是bitwise or,用于组合多个值。但在这种情况下,每个结果都在一个单独的else
中,因此您可以按照您的建议在技术上对其进行修改。从official tutorial 看到这样的代码,我真的有点惊讶。
|=
是一个复合赋值运算符,结合了=
(赋值)和|
(按位或)。
【参考方案1】:
m |= Modifier.PUBLIC;
等价于m = m | Modifier.PUBLIC;
,这意味着您对m
和Modifier.PUBLIC
执行按位或运算并将结果分配回m
。
由于您的方法只对 m
执行了一个这样的赋值,并且 m
被初始化为 0,因此您可以将其替换为简单赋值 (m = Modifier.PUBLIC;
) 并获得相同的输出。
【讨论】:
或者只是return
并摆脱 m
。现在,if
可以变成switch
。以上是关于表达“m |= Modifier.PUBLIC”是啥意思,为啥要这样做? [复制]的主要内容,如果未能解决你的问题,请参考以下文章