2013-08-01 74 views
2

任何人都可以解釋這|=是什麼意思?也喜歡在這裏:由java語法困惑

noti.flags |= Notification.FLAG_AUTO_CANCEL; 

回答

4

這是聲明的簡短表示:

noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL; 
2

這是一個位或運算符用作分配

noti.flags |= Notification.FLAG_AUTO_CANCEL; 

是一樣的

noti.flags = noti.flags | Notification.FLAG_AUTO_CANCEL 
2

這是規定NT版本的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; 

這是hexadecimal。如果你想知道爲什麼我們使用這些類型的標誌數16,這是因爲其他的標誌將表示:

0x00000020 
0x00000040 
0x00000080 

每一次,我們去同比的2此轉換爲二進制的功率,我們得到:

00010000 
00100000 
01000000 
10000000 

因此,我們可以使用一個bitwise or噸o確定哪些標誌存在,因爲每個標誌只包含一個1,它們都在不同的位置。什麼這個表達你貼(可能)不

1

簡單的解釋:

每個整數類型被表示爲位的名單。所以noti.flags有像00101類似的表示。 noti.flags變量似乎是標誌的表示,即類的選項。這意味着每一位意味着別的東西,並且可以使該類以不同的方式運行,具體取決於位是0還是1.

|運算符是一個按位或運算符。 |=是按位或運算符的賦值版本。 (表現就像+=

現在Notification.FLAG_AUTO_CANCEL是單個標誌的常量,可能是10000。 如果您將位或(|)應用於Notification.FLAG_AUTO_CANCELnoti.flags00101 | 10000),則結果將爲。這個結果現在分配給noti.flags。

您發佈的表達式基本上只設置了一個新標誌,稱爲FLAG_AUTO_CANCEL標誌變量noti.flags