Recebi um email com uma dúvida simples, mas interessante sobre Java, então resolvi posta aqui. O "|" (chama-se pipe ou popularmente "barra-em-pé") representa o operador OR binário. Quando utilizamos || (dois pipes) em uma expressão booleana, se a primeira for verdadeira, ele nem avalia a segunda.
boolean a = true; int x = 0; if (a == true || ++x > 0){ // O valor de x não mudará }x continuará zero, pois a segunda expressão não será avaliada.
Mas quando utilizamos o operador em uma atribuição, estamos fazendo uma operação binária de OR.
int a = 2; // Em binário 00000010 int b = 4; // Em binário 00000100 // Vai ativar os bits de "a" (que é 2) em "b" // Logo, em binário, ficará 00000110 que é igual a 6 b |= a;Você pode se perguntar: "em que isso influencia?" ou ainda "onde vou usar isso?". Essa abordagem é muito usada quando vc quer que uma propriedade possa assumir uma combinação de valores. Por exemplo, uma fonte pode ser bold, itálico e/ou sublinhado.
int bold = 1; //00001 int italic = 2; //00010 int underline = 4; //00100Pra deixar uma fonte, itálico e sublinhada, usaríamos:
int fonte = bold | underline; // 00101 = 5Aí você pode perguntar: qual a diferença entre isso e o + ? É que quando você usa o OR, se o valor já estiver setado, ele não é alterado. Continuando com o exemplo acima:
// ao invés de usar fonte += bold; // igual a 6 (não seria o que queremos) // usamos fonte |= bold; // como o primeiro bit já está como 1, fonte continua 5Já para checar se uma das opções da fonte está habilitada, usamos o operador &.
// assumindo que fonte = 5 = 00101 if (fonte & bold != 0){ // fonte é negrito }Fui claro? :)
4br4ç05,
nglauber
Um comentário:
Boa dica!
Postar um comentário