AFF Education Construa seu Futuro

Aula 07 - Variáveis com Tipo de Dado Errado

Variáveis com tipo de dado errado

Em Java, como uma linguagem fortemente tipada, é importante usar o tipo correto de dados para cada variável. Quando tentamos atribuir um valor de um tipo a uma variável de outro tipo incompatível, o compilador gera erros.

Importante: Java verifica os tipos durante a compilação para garantir que operações entre tipos incompatíveis não sejam permitidas, evitando assim erros durante a execução do programa.

Vejamos alguns exemplos de atribuições incorretas de tipos:

Exemplo de variável com tipo de dado errado

public class TiposDadosErrados {
    public static void main(String[] args) {
        // Tentativa de atribuir um decimal a uma variável do tipo int
        int numero = 10.5;  // Isso causará um erro de compilação
        
        System.out.println("Número: " + numero);
    }
}
TiposDadosErrados.java:4: error: incompatible types: possible lossy conversion from double to int int numero = 10.5; ^ 1 error

O erro ocorre porque estamos tentando atribuir um valor de ponto flutuante (double) a uma variável do tipo int, o que pode resultar em perda de dados (a parte decimal seria perdida).

Variáveis com declarações indevidas

public class DeclaracoesIndevidas {
    public static void main(String[] args) {
        // Tentativa de atribuir uma String a uma variável do tipo int
        int idade = "25";  // Isso causará um erro de compilação
        
        // Tentativa de atribuir um char a uma variável do tipo boolean
        boolean status = 'A';  // Isso causará um erro de compilação
        
        // Tentativa de atribuir um valor boolean a uma variável do tipo double
        double valor = true;  // Isso causará um erro de compilação
        
        System.out.println("Idade: " + idade);
        System.out.println("Status: " + status);
        System.out.println("Valor: " + valor);
    }
}
DeclaracoesIndevidas.java:4: error: incompatible types: String cannot be converted to int int idade = "25"; ^ DeclaracoesIndevidas.java:7: error: incompatible types: char cannot be converted to boolean boolean status = 'A'; ^ DeclaracoesIndevidas.java:10: error: incompatible types: boolean cannot be converted to double double valor = true; ^ 3 errors

Exemplo (corrigido)

Vejamos agora a forma correta de declarar as variáveis:

public class ExemploCorrigido {
    public static void main(String[] args) {
        // Declaração correta: usando tipo int para número inteiro
        int idade = 25;
        
        // Declaração correta: usando tipo double para número decimal
        double valor = 10.5;
        
        // Declaração correta: usando tipo char para um caractere
        char letra = 'A';
        
        // Declaração correta: usando tipo String para texto
        String nome = "João";
        
        // Declaração correta: usando tipo boolean para valor lógico
        boolean status = true;
        
        // Exibindo os valores das variáveis
        System.out.println("Idade: " + idade);
        System.out.println("Valor: " + valor);
        System.out.println("Letra: " + letra);
        System.out.println("Nome: " + nome);
        System.out.println("Status: " + status);
    }
}

Idade: 25

Valor: 10.5

Letra: A

Nome: João

Status: true

Limitações da variável int

public class LimitacoesInt {
    public static void main(String[] args) {
        // Mostrando os limites do tipo int
        System.out.println("Valor mínimo do int: " + Integer.MIN_VALUE);
        System.out.println("Valor máximo do int: " + Integer.MAX_VALUE);
        
        // Tentando armazenar um valor além do limite
        int valorGrande = Integer.MAX_VALUE + 1;  // Isso causará overflow
        
        System.out.println("Valor após overflow: " + valorGrande);
    }
}

Valor mínimo do int: -2147483648

Valor máximo do int: 2147483647

Valor após overflow: -2147483648

Observe que ao tentar adicionar 1 ao valor máximo do int, ocorre um overflow e o resultado volta para o valor mínimo negativo. Isso acontece porque o espaço de 4 bytes para armazenar um int é limitado.

Exercícios

Teste seus conhecimentos sobre variáveis com tipo de dado errado:

1. O que acontece quando tentamos atribuir um valor com ponto flutuante (como 3.14) a uma variável do tipo int?

2. Qual das seguintes tentativas de atribuição é válida em Java?

3. Qual é o valor máximo que uma variável do tipo int pode armazenar?

4. O que acontece quando ocorre um overflow em uma variável do tipo int?

5. Identifique a declaração INCORRETA no código abaixo:

public class TesteVariaveis {
    public static void main(String[] args) {
        int a = 10;
        double b = 20.5;
        char c = 'X';
        String d = "Teste";
        boolean e = 0;
    }
}

Exercícios de Aplicação AFF Education

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

1. O que ocorre ao compilar int preco = 9.99;?

2. Qual atribuição é válida em Java?