【问题标题】:What does |= in Java / Android mean? (bit-wise OR assignment) [duplicate]Java / Android 中的 |= 是什么意思? (按位或赋值)[重复]
【发布时间】:2012-05-19 12:34:42
【问题描述】:

可能重复:
Shortcut “or-assignment” (|=) operator in Java

我在 Android SDK 文档中找到了以下示例代码:

    boolean retValue = false;
    retValue |= mActionBarHelper.onCreateOptionsMenu(menu);
    retValue |= super.onCreateOptionsMenu(menu);

谁能给我看等效的代码来演示它的作用?

注意:我假设方法调用返回一个布尔值,所以我想看一个例子,它看起来像一个 if-else 构造。

【问题讨论】:

  • @GregKopff:它按位或,而不是逻辑或。
  • @Makoto:我认为布尔数据类型没有定义的位表示。
  • @GregKopff:按位或意味着您要使用两组位,并且当且仅当同一位置的位设置为高时,才将这些位设置为高。示例:1001 | 0110 = 1111。Check Wikipedia for more info.
  • @Makoto:很好理解——对于具有定义位表示的字节、字符、短裤、整数和长整数,这是有道理的。当然,布尔值可以被认为是 1 位(该语言使用一个字节来存储它),但它不像其他数据类型那样具有位表示。您不能将布尔值转换为字节并获取 0x00 / 0x01 。是的,按位运算很容易在单个位上进行概念化 - 但由于上述原因,我对此感到“惊讶”。

标签: java android bitwise-operators


【解决方案1】:

|应用于布尔值只是一个简单的布尔 OR。

boolean retValue = false;
retValue = retValue | mActionBarHelper.onCreateOptionsMenu(menu);
retValue = retValue | super.onCreateOptionsMenu(menu);

【讨论】:

    【解决方案2】:

    or 的缩写与我自己并分配给我,尽管它是非短路 or 而不是逻辑 or。因为它可以作为赋值和 or:ing 的简短版本,有时与布尔值一起使用,因为没有 ||=。 但重要说明:在这种情况下,它调用这两个方法,即使 retValue 可能已经是 true

    所以等价的(逻辑上)语句可以是多个,但有些是:

    boolean a = mActionBarHelper.onCreateOptionsMenu(menu);
    boolean b = super.onCreateOptionsMenu(menu);
    boolean retValue =  a || b;
    

    boolean retValue = mActionBarHelper.onCreateOptionsMenu(menu);
    retValue = super.onCreateOptionsMenu(menu) || retValue;
    

    【讨论】:

      猜你喜欢
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 2011-09-17
      • 2016-05-14
      • 2016-05-18
      • 1970-01-01
      • 2015-09-12
      相关资源
      最近更新 更多