A precedência do operador determina a ordem em que os operadores em uma expressão são avaliados.
Antes de começar a ler este artigo, você deve ter um conhecimento básico de Operadores Java.
Agora, dê uma olhada na declaração abaixo:
int myInt = 12 - 4 * 2;
Qual será o valor de myInt? Será (12 - 4)*2
, isto é , 16
? Ou será 12 - (4 * 2)
, isto é , 4
?
Quando dois operadores compartilham um operando comum, 4
neste caso, o operador com a precedência mais alta é operado primeiro.
Em Java, a precedência de *
é maior do que -
. Portanto, a multiplicação é realizada antes da subtração e o valor de myInt será 4.
Tabela de precedência do operador
A tabela a seguir lista a precedência de operadores em Java; quanto mais alto ele aparecer na tabela, maior será sua precedência.
Precedência do operador JavaOperadores | Precedência |
---|---|
incremento e decremento pós-fixados | ++ -- |
incremento e decremento de prefixo e unário | ++ -- + - ~ ! |
multiplicativo | * / % |
aditivo | + - |
mudança | << >> >>> |
relacional | < > <= >= instanceof |
igualdade | == != |
bit a bit AND | & |
OR exclusivo bit a bit | ^ |
bit a bit inclusivo OU | | |
E lógico | && |
OU lógico | || |
ternário | ? : |
tarefa | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Exemplo: precedência do operador
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Produto :
2
A precedência do operador do prefixo ++
é maior do que a do -
operador de subtração. Conseqüentemente,
resultado = a - ++ c - ++ b;
é equivalente a
resultado = a - (++ c) - (++ b);
Ao lidar com vários operadores e operandos em uma única expressão, você pode usar parênteses como no exemplo acima para maior clareza. A expressão entre parênteses é avaliada primeiro.
Associatividade de operadores em Java
Se uma expressão tiver dois operadores com precedência semelhante, a expressão será avaliada de acordo com sua associatividade (da esquerda para a direita ou da direita para a esquerda). Vamos dar um exemplo.
a = b = c;
Aqui, o valor de c é atribuído à variável b. Então, o valor de b é atribuído à variável a. Por quê? É porque a associatividade do operador = é da direita para a esquerda.
A tabela abaixo mostra a associatividade dos operadores Java junto com sua associatividade.
Precedência e associatividade do operador JavaOperadores | Precedência | Associatividade |
---|---|---|
incremento e decremento pós-fixados | ++ -- | da esquerda para direita |
incremento e decremento de prefixo e unário | ++ -- + - ~ ! | direita para esquerda |
multiplicativo | * / % | da esquerda para direita |
aditivo | + - | da esquerda para direita |
mudança | << >> >>> | da esquerda para direita |
relacional | < > <= >= instanceof | da esquerda para direita |
igualdade | == != | da esquerda para direita |
bit a bit AND | & | da esquerda para direita |
OR exclusivo bit a bit | ^ | da esquerda para direita |
bit a bit inclusivo OU | | | da esquerda para direita |
E lógico | && | da esquerda para direita |
OU lógico | || | da esquerda para direita |
ternário | ? : | direita para esquerda |
tarefa | = += -= *= /= %= &= ^= |= <<= >>= >>>= | direita para esquerda |
Você não precisa memorizar tudo aqui. Na maioria das vezes, a precedência e a associatividade dos operadores fazem sentido por si só. Você sempre pode voltar a este artigo para referência em caso de dúvida. Além disso, você pode usar parênteses se achar que isso torna seu código mais fácil de entender.