Operadores em Java

Aprenda sobre os operadores em Java, a ordem de precedência e entenda seus usos com exemplos. Também tentaremos compreender quando usar cada operador e o que esperar como resultado.

1. Operadores em Java

Um operador é um símbolo que realiza uma operação específica em um, dois ou três operandos, produzindo um resultado. O tipo do operador e seus operandos determinam o tipo de operação realizada e o tipo de resultado produzido.

Os operadores em Java podem ser categorizados com base em dois critérios:

  • Número de operadores – Existem três tipos de operadores com base no número de operandos. Um operador é chamado de operador unário, binário ou ternário, dependendo do número de operandos. Se um operador usa um operando, é chamado de operador unário; se usa dois operandos, é chamado de operador binário; se usa três operandos, é chamado de operador ternário.
  • Tipo de operação que realizam – Um operador pode ser classificado como operador aritmético, relacional, lógico ou bit a bit, dependendo do tipo de operação que realiza nos operandos.
Operador Descrição
+ – * /Operadores aritméticos unários ou binários
++ —Operadores unários de incremento e decremento
== !=Operadores de igualdade
< > <= =>Operadores relacionais
! & |Operadores lógicos
&& || ?:Operadores condicionais
= += -= *= /= %=Operadores de atribuição
&= |= ^= <<= >>= >>>=Operadores de atribuição bit a bit
& | ~ ^ << >> >>>Operadores bit a bit
-> ::Operadores de seta e referência de método
newOperador de criação de instância
instanceOfOperador de comparação de tipos
+Operador de concatenação de strings

Vamos aprender sobre alguns dos operadores mais usados com exemplos

2. Operador de Atribuição

  • O operador de atribuição (=) é usado para atribuir um valor a uma variável.
  • É um operador binário, que utiliza dois operandos. 
  • O valor do operando à direita é atribuído ao operando à esquerda.
  • O operando à esquerda deve ser uma variável.
// 26 é o operando à direita. 
// counter é o operando à esquerda, que é uma variável do tipo int.

int counter = 26;

O Java garante que o valor do operando à direita seja compatível com o tipo de dados do operando à esquerda. Caso contrário, ocorre um erro em tempo de compilação.

No caso de variáveis de referência, pode-se compilar o código, mas ocorrerá um erro de ClassCastException em tempo de execução se o objeto representado pelo operando da direita não for compatível com a variável de referência à esquerda.

3. Operadores Aritméticos

  • Operadores como + (mais), – (menos),* (multiplicação), / (divisão) são chamados de operadores aritméticos em Java.
  • Eles só podem ser usados com operandos de tipo numérico, como byte, short, char, int, long, float e double
  • Não podem ser usados com operandos do tipo boolean e tipos de referência.
int soma = 10 + 20; 
int diferenca = 50 - 20; 
long area = 20l * 30l;    
int porcentagem = 20 / 100;

3.1. Operadores Aritméticos Unários

OperadorDescrição
‘+’Indica valor positivo
‘-‘Nega o valor da expressão
‘++’Incrementa o valor em 1
‘–‘Decrementa o valor em 1
‘!’Inverte o valor booleano

3.2. Operadores Aritméticos Binários

OperadorDescrição
‘+’Adição
‘-‘Subtração
‘*’Multiplicação
‘/’Divisão
‘%’Resto da divisão

4. Operador de Concatenação de Strings

O operador + é sobrecarregado em Java, sendo usado tanto para adição quanto para concatenação de strings.

4.1. Concatenando Duas Strings

Até agora, você viu seu uso como um operador de adição aritmética para somar dois números. Ele também pode ser usado para concatenar duas strings.

String str1 = "Hello";

String str2 = " World";

String str3 = str1 + str2;      // Atribui "Hello World" a str3

4.2. Concatenando Tipos Primitivos a String

O operador de concatenação de strings também é usado para concatenar um valor de tipo de dado primitivo e de tipo de dado de referência a uma string.

int num = 26;

String str1 = "Alfabetos";

String str2 = num + str1;    // Assigns "26Alfabetos" to str2

4.3. Concatenando null

Se uma variável de referência contiver a referência ‘null’, o operador de concatenação utiliza a string ‘null’.

String str1 = "Eu sou ";

String str2 = null;

String str3 = str1 + str2;    // Assigns "Eu sou null" to str3

5. Operadores Relacionais

  • Todos os operadores relacionais são operadores binários.
  • Eles utilizam dois operandos.
  • O resultado produzido por um operador relacional é sempre um valor booleano true ou false
  • Eles são amplamente utilizados em instruções de controle em Java, como instruções if, while, etc.

Vamos ver abaixo todos os operadores relacionais disponíveis em Java.

OperadorDescrição
‘==’Verifica se os valores dos operandos são iguais
‘!=’Verifica se os valores dos operandos são diferentes
‘>’Verifica se o operando da esquerda é maior que o da direita
‘<‘Verifica se o operando da esquerda é menor que o da direita
‘>=’Verifica se o operando da esquerda é maior ou igual ao da direita
‘<=’Verifica se o operando da esquerda é menor ou igual ao da direita
int result = 20; 
if( result > 10) {//true
    //some operation
}

boolean isEqual = ( 10 == 20 );     //false

6. Operadores Lógicos Booleanos

São usados apenas com operadores booleanos, principalmente em instruções de controle para comparar condições.

OperadorDescrição
‘!’Inverte o valor booleano
‘&&’Retorna true se ambos os operadores forem true
‘&’Retorna true se ambos os operadores forem true
‘||’Retorna true se um dos operadores for true
‘|’Retorna true se um dos operandos for true
‘^’Retorna true se um dos operandos for true, mas não ambos
‘&=;’Se ambos os operandos forem avaliados como verdadeiros, `&=` retorna verdadeiro. Caso contrário, retorna falso. 
‘|=’Se qualquer um dos operandos for avaliado como verdadeiro, `|=` retorna verdadeiro. Caso contrário, retorna falso. 
‘^=’Se os dois operandos forem avaliados como valores diferentes, ou seja, se um dos operandos for verdadeiro, mas não ambos, `^=` retorna verdadeiro. Caso contrário, retorna falso.
int result = 20; 

if( result > 10 && result < 30) {
    //alguma operacao
}

if( result > 10 || result < 30) {
    //alguma operacao
}
  1. O operador lógico AND (&) funciona da mesma forma que o operador lógico AND de curto-circuito (&&), com uma diferença. O operador lógico AND (&) avalia seu operando à direita mesmo se o operando à esquerda for avaliado como falso.
  2. O operador lógico OR (|) funciona da mesma forma que o operador lógico OR de curto-circuito (||), com uma diferença. O operador lógico OR (|) avalia seu operando à direita mesmo se o operando à esquerda for avaliado como verdadeiro.

7. Operadores Bit a Bit

Os operadores bit a bit manipulam os bits individuais dos operandos, e podem ser aplicados a tipos inteiros.

OperadorDescrição
‘&’O operador AND binário copia um bit para o resultado se ele existir em ambos os operandos.
‘|’O operador OR binário copia um bit se ele existir em pelo menos um dos operandos.
‘^’O operador XOR binário copia o bit se ele estiver definido em um dos operandos, mas não em ambos.
‘~’O operador de complemento de um binário é unário e tem o efeito de ‘inverter’ os bits.
<<Operador de deslocamento à esquerda binário. O valor do operando à esquerda é deslocado para a esquerda pelo número de bits especificado pelo operando à direita.
>>Operador de deslocamento à direita binário. O valor do operando à esquerda é deslocado para a direita pelo número de bits especificado pelo operando à direita.
>>>Operador de deslocamento à direita com preenchimento de zeros. O valor do operando à esquerda é deslocado para a direita pelo número de bits especificado pelo operando à direita, e os valores deslocados são preenchidos com zeros.

8. Operador Ternário

O “Operador Ternário” é um operador condicional que em Java utiliza três operandos. Sua sintaxe é:

condição ? expressão1 : expressão2
  • Condição: Uma expressão booleana que é avaliada como true ou false.
  • expressão1: Se a condição for true, essa expressão é avaliada e seu valor é retornado.
  • expressão2: Se a condição for false, essa expressão é avaliada e seu valor é retornado.

Exemplo:

int a = 10;

int b = 20;

int maior = (a > b) ? a : b;  // Se a > b, maior recebe o valor de a; caso contrário, recebe o valor de b.


O operador ternário é uma forma concisa de escrever uma expressão condicional, muitas vezes substituindo uma instrução if-else.

9. Tabela de Precedência dos Operadores

Java possui regras bem definidas para especificar a ordem na qual os operadores em uma expressão são avaliados quando a expressão contém vários operadores. Por exemplo, multiplicação e divisão têm maior precedência do que adição e subtração.

Regras de precedência podem ser sobrescritas por parênteses explícitos.

Quando dois operadores compartilham um operando, o operador com maior precedência vem primeiro. Por exemplo, 1 + 2 * 3 é tratado como 1 + (2 * 3) porque a precedência da multiplicação é maior do que a adição.

Na expressão acima, se você quiser adicionar os valores primeiro, use parênteses explícitos assim: (1 + 2) * 3.

Precedência dos Operadores

PrecedênciaOperadorTipoAssociatividade
15() []Parênteses, Subscrito de Array, Seleção de MembroEsquerda para Direita
14++ --Incremento e Decremento Pós-fixadoDireita para Esquerda
13++ -- + - ! ~ (tipo)Incremento e Decremento Pré-fixado, Mais, Menos, Negação Lógica, Complemento Bitwise, Conversão de TipoDireita para Esquerda
12* / %Multiplicação, Divisão, MóduloEsquerda para Direita
11+ -Adição, SubtraçãoEsquerda para Direita
10<< >> >>>Deslocamento à Esquerda, Deslocamento à Direita com Sinal, Deslocamento à Direita com Preenchimento de ZerosEsquerda para Direita
9< <= > >= instanceofRelacional Menor, Menor ou Igual, Maior, Maior ou Igual, Comparação de TipoEsquerda para Direita
8== !=Igualdade, DiferençaEsquerda para Direita
7&AND BitwiseEsquerda para Direita
6^XOR BitwiseEsquerda para Direita
5``OR Bitwise
4&&AND LógicoEsquerda para Direita
3``
2?:Condicional TernárioDireita para Esquerda
1= += -= *= /= %=Atribuição, Atribuição com Adição, Atribuição com Subtração, Atribuição com Multiplicação, Atribuição com Divisão, Atribuição com MóduloDireita para Esquerda

Essa tabela ajuda a determinar a ordem em que os operadores são aplicados em expressões complexas, garantindo que a avaliação aconteça conforme esperado.