【问题标题】:Confused by java syntax [duplicate]被java语法混淆[重复]
【发布时间】:2013-08-02 01:53:04
【问题描述】:

谁能解释这个|= 是什么意思?喜欢这里:

   noti.flags |= Notification.FLAG_AUTO_CANCEL;

【问题讨论】:

    标签: java android syntax


    【解决方案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_CANCELnoti.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;
          

          【讨论】:

            猜你喜欢
            • 2012-11-04
            • 2016-04-02
            • 1970-01-01
            • 1970-01-01
            • 2023-03-28
            • 1970-01-01
            • 2017-04-18
            • 2012-11-19
            • 2021-03-30
            相关资源
            最近更新 更多