Saya mencoba mencari menggunakan Google Search dan Stack Overflow, tetapi tidak muncul hasil apa pun. Saya telah melihat ini di kode pustaka opensource:
Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
Apa yang dimaksud dengan "| =" ( pipe equal operator
)?
pipe equal operator
ke pertanyaan ini atau dokumentasi lain pada topik tidak akan membantu orang mencari.vertical bar
yang akhirnya membawa saya ke sini.Jawaban:
|=
membaca dengan cara yang sama seperti+=
.sama dengan
di mana
|
operator bit-bijaksana ATAU.Semua operator direferensikan di sini .
Operator bit-wise digunakan karena, seperti sering, konstanta tersebut memungkinkan int untuk membawa bendera.
Jika Anda melihat konstanta itu, Anda akan melihat bahwa mereka memiliki kekuatan dua:
Jadi Anda bisa menggunakan bit-wise OR untuk menambahkan flag
begitu
berarti kami menambahkan bendera.
Dan secara simetris, kami menguji suatu bendera diset menggunakan
&
:sumber
j += 1;
sama denganj = j + 1;
.j
ituvolatile
?), Tapi saya akan mengambil kata-kata Anda untuk itu.boolean hasVibrate = DEFAULT_VIBRATE & myFlags;
- dapatkah Anda menerjemahkan dariint
menjadiboolean
seperti itu di Jawa? Itu akan berlaku di C, tapi saya pikir di Jawa itu harus ditulis sebagaiboolean hasVibrate = ((DEFAULT_VIBRATE & myFlags) == DEFAULT_VIBRATE);
+=
akhirnya membuat saya mengerti. Terima kasih!Anda sudah mendapat jawaban yang cukup untuk pertanyaan Anda. Tetapi mungkin jawaban saya membantu Anda lebih banyak tentang
|=
jenis operator biner.Saya menulis tabel untuk operator bitwise :
Berikut ini valid:
perhatikan semua operator adalah operator biner.
Juga Catatan: (untuk poin di bawah ini saya ingin menambahkan jawaban saya)
>>>
adalah operator bitwise di Jawa yang disebut Pergeseran tidak bertandatetapi>>> = operator>>>=
bukan operator di Jawa.~
bitwise melengkapi bit,0 to 1 and 1 to 0
(operator unary) tetapi~=
bukan operator.Selain itu,
!
Disebut Logical NOT Operator, tetapi!=
Memeriksa apakah nilai dua operan sama atau tidak, jika nilai tidak sama maka kondisinya menjadi benar. mis(A != B) is true
. dimanaA=!B
cara jikaB
yangtrue
kemudianA
menjadifalse
(dan jikaB
inifalse
kemudianA
menjaditrue
).catatan:
|
tidak disebut pipa, melainkan disebut OR, pipa adalah terminologi shell mentransfer satu proses ke proses selanjutnya ..sumber
Saya sedang mencari jawaban tentang apa yang
|=
ada di Groovy dan meskipun jawaban di atas benar, mereka tidak membantu saya memahami sepotong kode tertentu yang saya lihat.Khususnya, ketika diterapkan pada variabel boolean "| =" akan mengaturnya menjadi TRUE saat pertama kali ia menemukan ekspresi yang benar di sisi kanan dan akan MEMEGANG nilai TRUE untuk semua | = panggilan berikutnya. Seperti gerendel.
Berikut ini contoh sederhana dari ini:
Keluaran:
Sunting : Mengapa ini berguna?
Pertimbangkan situasi di mana Anda ingin tahu apakah ada yang berubah pada berbagai objek dan jika demikian beri tahu beberapa perubahan. Jadi, Anda akan mengatur
hasChanges
boolean dan mengaturnya ke|= diff (a,b)
dan kemudian|= dif(b,c)
dll. Ini adalah contoh singkat:sumber
y|=expr
tersebut bukan hubungan arus pendek (tidak sepertiy = y || expr
), artinyaexpr
selalu dievaluasi. Ini tidak jelas bagi saya untuk pertama kalinya :) Jadi, penting untuk dicatat sebelum refactoring bahwa penggantiany|=expr
↔y=y||x
adalah tidak semantik setara dalam halexpr
sebenarnya memiliki efek samping.hasChanges
itu mungkin akan lebih baik untuk memilihy=y||x
bentuk untuk mendapatkan manfaat dari short-ciruit, karena ketika Anda menemukan perubahan itu sebenarnya tidak diperlukan untuk melakukan perbedaan yang berguna karena Anda sudah tahu jawabannya. (Terutama penting dalam situasi kehidupan nyata ketika objek yang dibandingkan rumit dandiff
membuat mereka tidak terlalu cepat)||
dan&&
, dan dalam bagian yang sesuai 15,23 dan 15,24 spesifikasi fakta ini dinyatakan dengan jelas, dan perbedaan ini dari|
dan&
ditekankan.||=
dan&&=
operator yang akan melanggar aturan dan membutuhkan penyebutan khusus).Ini adalah pemendekan untuk ini:
Dan
|
sedikit bijak ATAU.sumber
|
adalah bitwise-atau operator, dan sedang diterapkan seperti+=
.sumber
Catatan: || = tidak ada. (logis atau) Anda dapat menggunakan
atau
sumber
y |= expr
dengan boolean dan itu memberikan hasil yang samay
seperti varian Anda dengan catatan penting bahwa itu bukan garis pendek , yang berarti bahwa expr selalu dievaluasi, bahkan dalam kasusy==true