Intenté buscar usando Google Search y Stack Overflow, pero no mostró ningún resultado. He visto esto en el código de la biblioteca de código abierto:
Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
¿Qué significa "| =" ( pipe equal operator
)?
pipe equal operator
esta pregunta o cualquier otra documentación sobre el tema no ayudaría a las personas a buscar.vertical bar
que finalmente me llevó aquí.Respuestas:
|=
se lee de la misma manera que+=
.es lo mismo que
donde
|
está el operador OR en cuanto a bits.Todos los operadores están referenciados aquí .
Se utiliza un operador de bit a bit porque, como es frecuente, esas constantes permiten que un int lleve banderas.
Si observas esas constantes, verás que están en potencias de dos:
Por lo tanto, puede usar OR en bits para agregar banderas
entonces
simplemente significa que agregamos una bandera.
Y simétricamente, probamos que se establezca una bandera usando
&
:fuente
j += 1;
es lo mismo quej = j + 1;
.j
es asívolatile
?), Pero aceptaré tu palabra.boolean hasVibrate = DEFAULT_VIBRATE & myFlags;
- se puede traducir deint
queboolean
de esa manera en Java? Eso sería válido en C, pero pensé que en Java tenía que escribirse comoboolean hasVibrate = ((DEFAULT_VIBRATE & myFlags) == DEFAULT_VIBRATE);
+=
finalmente hizo el truco para que lo entendiera. ¡Gracias!Ya tienes suficiente respuesta para tu pregunta. Pero puede ser mi respuesta ayudarlo más sobre el
|=
tipo de operadores binarios.Estoy escribiendo una tabla para operadores bit a bit : Los
siguientes son válidos:
tenga en cuenta que todos los operadores son operadores binarios.
También tenga en cuenta: (para los puntos a continuación, quería agregar mi respuesta)
>>>
es un operador bit a bit en Java que se llama desplazamiento sin signopero>>> = operador>>>=
no un operador en Java.~
son bits de complemento bit a bit0 to 1 and 1 to 0
(operador unario) pero~=
no un operador.Además, se
!
llama operador lógico NOT, pero!=
verifica si el valor de dos operandos es igual o no, si los valores no son iguales, entonces la condición se vuelve verdadera. por ej(A != B) is true
. donde comoA=!B
medios siB
setrue
luegoA
se convierten enfalse
(y siB
esfalse
entoncesA
convertidotrue
).nota al margen:
|
no se llama tubería, sino que se llama OR, la tubería es la terminología de shell transfiere un proceso al siguiente ...fuente
Estaba buscando una respuesta sobre lo que
|=
hace en Groovy y, aunque las respuestas anteriores son correctas, no me ayudaron a comprender un código particular que estaba viendo.En particular, cuando se aplica a una variable booleana "| =" lo establecerá en VERDADERO la primera vez que encuentre una expresión veraz en el lado derecho y MANTENERÁ su valor VERDADERO para todas las llamadas subsiguientes | =. Como un pestillo.
Aquí un ejemplo simplificado de esto:
Salida:
Editar : ¿Por qué es útil?
Considere una situación en la que desea saber si algo ha cambiado en una variedad de objetos y, de ser así, notifique a alguno de los cambios. Entonces, configuraría un
hasChanges
booleano y lo configurará en|= diff (a,b)
y luego,|= dif(b,c)
etc. Aquí hay un breve ejemplo:fuente
y|=expr
es un cortocircuito (a diferenciay = y || expr
), lo que significa queexpr
siempre se evalúa. Esto no fue obvio para mí por primera vez :) Por lo tanto, es importante tener en cuenta antes de refactorizar que el reemplazoy|=expr
↔ noy=y||x
es semánticamente equivalente en caso de queexpr
realmente tenga efectos secundarios.hasChanges
que sería probablemente sea mejor preferiry=y||x
la forma de beneficiarse de corto ciruit, porque cuando se encontró ningún cambio en realidad no es necesario hacer diferenciaciones susequent porque ya sabe la respuesta. (Especialmente importante en la situación de la vida real cuando los objetos comparados son complicados ydiff
no son muy rápidos)||
y&&
, y en las secciones correspondientes 15.23 y 15.24 de la especificación, este hecho se declara claramente, y esta diferencia|
y&
se enfatiza.||=
y&&=
los operadores lo cual infrinja la regla y requiera una mención especial).Es un acortamiento para esto:
Y
|
es un poco sabio OR.fuente
|
es el operador bit a bit , y se está aplicando como+=
.fuente
Nota: || = no existe. (lógico o) Puedes usar
o
fuente
y |= expr
con booleanos y da el mismo resultadoy
que sus variantes con la nota importante de que no es un traje corto , lo que significa que expr siempre se evalúa, incluso en el caso dey==true