表达“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;,这意味着您对mModifier.PUBLIC 执行按位或运算并将结果分配回m

由于您的方法只对 m 执行了一个这样的赋值,并且 m 被初始化为 0,因此您可以将其替换为简单赋值 (m = Modifier.PUBLIC;) 并获得相同的输出。

【讨论】:

或者只是 return 并摆脱 m。现在,if 可以变成switch

以上是关于表达“m |= Modifier.PUBLIC”是啥意思,为啥要这样做? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

三元表达式是啥?

前缀、中缀、后缀表达式是怎样的?(程序设计)

什么是前缀表达式,中缀表达式,后缀表达式

什么是Linq表达式?什么是Lambda表达式?

C语言中啥是逻辑表达式,啥是关系表达式?

什么是正则表达式