can anyone explain what this |=
means ? Like in here:
noti.flags |= Notification.FLAG_AUTO_CANCEL;
It's a short representation of the statement:
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;
It's a Bitwise OR operator used as assignment
noti.flags |= Notification.FLAG_AUTO_CANCEL;
is the same of
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL
It's the assignment version of the Bitwise Or operator, ie:
noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL;
The bitwise or
does an inclusive bitwise OR operation:
10110 bitwise or
01100
-----------------
11110
From the source code:
Bit to be bitwise-ored into the flags field that should be set if the notification should be canceled when it is clicked by the user.
public static final int FLAG_AUTO_CANCEL = 0x00000010;
This is hexadecimal for the number 16. If you're wondering why we use these types of flags, it's because other flags will have representations:
0x00000020
0x00000040
0x00000080
Each time, we go up by a power of 2. Converting this to binary, we get:
00010000
00100000
01000000
10000000
Hence, we can use a bitwise or
to determine which of the flags are present, since each flag is contains only one 1
and they are all in different locations.
Simple explanation of what this expression you posted (probably) does:
Every integral type is represented as a list of bits. So noti.flags
has a representation of something like 00101
. The noti.flags
variable seems to be a representation of flags i.e. options of a class. This means every bit means something else and could make the class behave in a different way, depending if the bit is 0 or 1.
The |
operator is a bitwise OR operator. |=
is the assignment version of the bitwise OR operator. (Behaves just like +=
)
Now Notification.FLAG_AUTO_CANCEL
is a constant for a single flag, possibly 10000
.
If you apply bitwise OR (|
) to Notification.FLAG_AUTO_CANCEL
and to noti.flags
(00101 | 10000
), the result will be 10101
. This result is now assigned to noti.flags.
The expression you posted basically just sets a new flag, called FLAG_AUTO_CANCEL
to the flag variable noti.flags
.