AFF Education Construa seu Futuro

Aula 20 - Inferência de Variável (var)

Introdução ao var

O var é uma palavra-chave introduzida no Java 10 que permite inferência de tipo de dado, ou seja, o compilador decide automaticamente qual é o tipo da variável baseado no valor atribuído a ela.

A palavra-chave var simplifica a declaração de variáveis em Java, permitindo que o compilador determine o tipo da variável com base no valor atribuído, tornando o código mais conciso.

// Usando String explicitamente
String nome = "Maria";

// Usando var - o compilador infere que é String
var nome = "Maria";

// Compilador infere que é int
var idade = 25;

// Compilador infere que é double
var preco = 19.99;

// Compilador infere que é boolean
var ativo = true;

Inferência de variável (var)

Ao declarar e atribuir um valor a uma determinada variável usando var, o Java infere (deduz) o tipo de variável que foi atribuída.

Importante: Depois de inferido o tipo de variável a uma determinada variável, você não pode mudar o tipo de valor associado àquela variável. Ou seja, o Java amarra o tipo de variável a uma determinada variável e não pode ser mudado depois, mesmo usando var.

Exemplo de uso do var

Vejamos um exemplo completo de como usar var em Java:

public class ExemploVar {
    public static void main(String[] args) {
        // Usando inferência de tipo com var
        var nome = "João Silva";
        var idade = 30;
        var altura = 1.75;
        var ativo = true;
        
        // Imprimindo os valores
        System.out.println("Nome: " + nome);
        System.out.println("Idade: " + idade);
        System.out.println("Altura: " + altura);
        System.out.println("Ativo: " + ativo);
        
        // Imprimindo os tipos das variáveis
        System.out.println("\nTipos das variáveis:");
        System.out.println("Tipo de nome: " + nome.getClass().getName());
        System.out.println("Tipo de idade: " + ((Object)idade).getClass().getName());
        System.out.println("Tipo de altura: " + ((Object)altura).getClass().getName());
        System.out.println("Tipo de ativo: " + ((Object)ativo).getClass().getName());
        
        // Modificando valores (mas mantendo o mesmo tipo)
        nome = "Maria Oliveira";
        idade = 25;
        altura = 1.65;
        ativo = false;
        
        System.out.println("\nValores atualizados:");
        System.out.println("Nome: " + nome);
        System.out.println("Idade: " + idade);
        System.out.println("Altura: " + altura);
        System.out.println("Ativo: " + ativo);
        
        // Isso geraria um erro de compilação:
        // nome = 123; // Erro: incompatível com o tipo String
        // idade = 3.14; // Erro: incompatível com o tipo int
    }
}

Nome: João Silva

Idade: 30

Altura: 1.75

Ativo: true

Tipos das variáveis:

Tipo de nome: java.lang.String

Tipo de idade: java.lang.Integer

Tipo de altura: java.lang.Double

Tipo de ativo: java.lang.Boolean

Valores atualizados:

Nome: Maria Oliveira

Idade: 25

Altura: 1.65

Ativo: false

Exercícios

Teste seus conhecimentos sobre a inferência de variáveis em Java:

1. Em qual versão do Java foi introduzida a palavra-chave var?

2. Qual será o tipo inferido para a seguinte variável? var valor = 15.0;

3. Qual das seguintes afirmações sobre var é INCORRETA?

4. O que acontecerá no seguinte código?

var texto = "Hello";
texto = 123;

5. Qual é o tipo inferido na seguinte declaração? var resultado = 10 / 3;

Exercícios de Aplicação AFF Education

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

1. Com inferência de tipo, var preco = 9.99; faz preco ser do tipo:

2. Por que var x; (sem atribuição) causa erro?