AFF Education Construa seu Futuro

Aula 29 - Introdução à Operadores

Introdução à Operadores

Há três tipos de operadores: unários, binários e ternários. Nesta aula, vamos explorar cada um deles e suas aplicações em Java.

Classificação dos operadores:

Além disso, os operadores podem ser categorizados como:

Operadores Unários

Operadores unários são aqueles que atuam sobre um único operando (valor ou variável). Exemplos comuns incluem o incremento (++) e o decremento (--) que já vimos em aulas anteriores.

public class OperadoresUnarios {
    public static void main(String[] args) {
      // Incremento e decremento      
      // diferenças] entre ++variavel e variavel++
      // variavel++ incrementa depois na próxima chamada
      // ++variavel incrementa na hora que é chamada
      int num = 5;
      System.out.println("num: " + num);
      System.out.println("num++ (ainda não alterou o valor): " + num++);
      System.out.println("num++ (chamo a variável num novamente, agora atualizada): " + num);
      
      num = 5;
      System.out.println("num: " + num);
      System.out.println("++num: " + ++num);
      
      // diferenças] entre --variavel e variavel--
      // variavel-- decrementa depois na próxima chamada
      // --variavel decrementa na hora que é chamada
      int num2 = 5;
      System.out.println("num2: " + num2);
      System.out.println("num2-- (ainda não alterou o valor): " + num2--);
      System.out.println("num2-- (chamo a variável num2 novamente, agora atualizada): " + num2);
      
      num2 = 5;
      System.out.println("num2: " + num2);
      System.out.println("--num2: " + --num2);
  }
}

num = 5

num++ (ainda não alterou o valor): 5

num++ (chamo a variável num novamente, agora atualizada): 6

num: 5

++num: 6

num2: 5

num2-- (ainda não alterou o valor): 5

num2-- (chamo a variável num2 novamente, agora atualizada): 4

num2: 5

--num2: 4

Dica: A diferença entre pré-incremento/decremento (++num, --num) e pós-incremento/decremento (num++, num--) é a ordem em que as operações ocorrem. No pré, a variável é alterada antes de seu valor ser usado, enquanto no pós, o valor original da variável é usado e somente depois ela é alterada.

Operadores Binários

Operadores binários atuam sobre dois operandos. Essa categoria inclui os operadores aritméticos, relacionais e lógicos que já vimos, bem como outros.

public class OperadoresBinarios {
    public static void main(String[] args) {
        // Operadores aritméticos
        int a = 10;
        int b = 3;
        
        System.out.println("Operadores Aritméticos:");
        System.out.println("a + b = " + (a + b));  // 13
        System.out.println("a - b = " + (a - b));  // 7
        System.out.println("a * b = " + (a * b));  // 30
        System.out.println("a / b = " + (a / b));  // 3 (divisão inteira)
        System.out.println("a % b = " + (a % b));  // 1 (resto da divisão)
        
        // Operadores relacionais
        System.out.println("\nOperadores Relacionais:");
        System.out.println("a > b: " + (a > b));   // true
        System.out.println("a < b: " + (a < b));   // false
        System.out.println("a >= b: " + (a >= b)); // true
        System.out.println("a <= b: " + (a <= b)); // false
        System.out.println("a == b: " + (a == b)); // false
        System.out.println("a != b: " + (a != b)); // true
        
        // Operadores lógicos
        boolean x = true;
        boolean y = false;
        
        System.out.println("\nOperadores Lógicos:");
        System.out.println("x && y: " + (x && y)); // false (AND lógico)
        System.out.println("x || y: " + (x || y)); // true (OR lógico)
    }
}

Operadores Aritméticos:

a + b = 13

a - b = 7

a * b = 30

a / b = 3

a % b = 1

Operadores Relacionais:

a > b: true

a < b: false

a >= b: true

a <= b: false

a == b: false

a != b: true

Operadores Lógicos:

x && y: false

x || y: true

Operador Ternário

O operador ternário é o único operador em Java que atua sobre três operandos. Ele funciona como uma versão compacta do if-else para atribuição de valores.

public class OperadorTernario {
    public static void main(String[] args) {
        // Operador ternário: condição ? valor_se_verdadeiro : valor_se_falso
        int idade = 17;
        String status = (idade >= 18) ? "Maior de idade" : "Menor de idade";
        
        System.out.println("Idade: " + idade);
        System.out.println("Status: " + status);
        
        // Comparando com if-else tradicional
        String statusTradicional;
        if (idade >= 18) {
            statusTradicional = "Maior de idade";
        } else {
            statusTradicional = "Menor de idade";
        }
        
        System.out.println("Status (if-else tradicional): " + statusTradicional);
        
        // Exemplo com operações
        int a = 10;
        int b = 5;
        int maiorValor = (a > b) ? a : b;
        
        System.out.println("\na = " + a);
        System.out.println("b = " + b);
        System.out.println("Maior valor: " + maiorValor);
        
        // Você pode encadear operadores ternários, mas isso pode dificultar a leitura
        int c = 15;
        int valorMedio = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
        System.out.println("c = " + c);
        System.out.println("Valor médio: " + valorMedio);
        
        // Usando ternário para determinar par ou ímpar
        int numero = 7;
        String parOuImpar = (numero % 2 == 0) ? "Par" : "Ímpar";
        System.out.println("\nNúmero " + numero + " é: " + parOuImpar);
    }
}

Idade: 17

Status: Menor de idade

Status (if-else tradicional): Menor de idade

a = 10

b = 5

Maior valor: 10

c = 15

Valor médio: 15

Número 7 é: Ímpar

Atenção: Embora o operador ternário possa tornar o código mais compacto, ele pode dificultar a leitura quando utilizado em expressões complexas ou encadeado. Use-o com moderação e priorize a clareza do código.

Operadores de Atribuição

Os operadores de atribuição são usados para atribuir valores a variáveis. Além do operador de atribuição simples (=), existem operadores compostos que combinam uma operação e uma atribuição.

public class OperadoresAtribuicao {
    public static void main(String[] args) {
        // Atribuição simples
        int a = 10;
        System.out.println("Valor inicial de a: " + a);
        
        // Atribuição composta (+=)
        a += 5;  // Equivalente a: a = a + 5;
        System.out.println("Após a += 5: " + a);
        
        // Atribuição composta (-=)
        a -= 3;  // Equivalente a: a = a - 3;
        System.out.println("Após a -= 3: " + a);
        
        // Atribuição composta (*=)
        a *= 2;  // Equivalente a: a = a * 2;
        System.out.println("Após a *= 2: " + a);
        
        // Atribuição composta (/=)
        a /= 4;  // Equivalente a: a = a / 4;
        System.out.println("Após a /= 4: " + a);
        
        // Atribuição composta (%=)
        a %= 3;  // Equivalente a: a = a % 3; 
    }
}

Valor inicial de a: 10

Após a += 5: 15

Após a -= 3: 12

Após a *= 2: 24

Após a /= 4: 6

Após a %= 3: 0

Dica: Os operadores de atribuição compostos são uma forma mais concisa de atualizar o valor de uma variável com base em seu valor atual.

Precedência de Operadores

A precedência dos operadores determina a ordem em que as operações são executadas em uma expressão. Quando múltiplos operadores aparecem em uma expressão, aqueles com maior precedência são avaliados primeiro.

Categoria Operadores Precedência
Unários ++, --, +, -, !, ~ Alta
Multiplicativo *, /, % ↓
Aditivo +, - ↓
Deslocamento <<, >>, >>> ↓
Relacional <, >, <=, >=, instanceof ↓
Igualdade ==, != ↓
AND bit a bit & ↓
XOR bit a bit ^ ↓
OR bit a bit | ↓
AND lógico && ↓
OR lógico || ↓
Ternário ? : ↓
Atribuição =, +=, -=, *=, /=, %=, etc. Baixa
public class PrecedenciaOperadores {
    public static void main(String[] args) {
        // Exemplo de precedência de operadores
        int resultado1 = 5 + 3 * 2;
        System.out.println("5 + 3 * 2 = " + resultado1);  // 11 (multiplicação tem precedência sobre adição)
        
        // Usando parênteses para alterar a precedência
        int resultado2 = (5 + 3) * 2;
        System.out.println("(5 + 3) * 2 = " + resultado2);  // 16 (parênteses têm precedência sobre qualquer operador)
        
    }
}

5 + 3 * 2 = 11

(5 + 3) * 2 = 16

Importante: Quando em dúvida sobre a precedência de operadores, use parênteses para tornar a ordem de avaliação clara e evitar erros. O código fica mais legível e menos propenso a enganos.

Exercícios

Teste seus conhecimentos sobre operadores em Java:

1. Quais são os três tipos de operadores em Java?

2. Qual é o resultado da expressão: 5 + 3 * 2 - 4 / 2?

3. Qual é a diferença entre i++ e ++i?

4. O que faz o operador ternário em Java?

5. Complete o código para verificar se um número é par ou ímpar usando o operador ternário:

int numero = 7;
String resultado = ___________________;

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Qual o resultado de 10 + 4 * 2 em Java (precedência de operadores)?

2. Para forçar a soma antes da multiplicação em 10 + 4 * 2, escreve-se: