Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Seria esse o motivo para compilar no Exerício 2, mas não compilar no Execício 3?

Compila no exercício 2 porque a variável é da instância, um atributo da instância, e variável de instância não precisa inicializar e Não Compila no exercício 3 porque a variável é local de um bloco da condição e, por isso, precisa ser inicializada, seria esses os motivos para compilar um e não compilar o outro?

Se a resposta for sim, pq na variável da instância não precisa ser inicializada?

Exercício 2:

class B {
    String msg;

    void imprime() {
        if (!msg.isEmpty())
            System.out.println(msg);
        else
            System.out.println("vazio");
    }
}

Exercício 3:

class B {

    void imprime() {
        String msg;
        if (!msg.isEmpty())
            System.out.println(msg);
        else
            System.out.println("vazio");
    }
}
2 respostas
solução!

Olá, Diógenes

Você está no caminho certo com seu raciocínio.

No Exercício 2, msg é uma variável de instância, ou seja, um atributo da instância da classe B. No Java, variáveis de instância recebem um valor padrão caso não sejam explicitamente inicializadas. No caso de String, o valor padrão é null. Portanto, mesmo que você não inicialize msg explicitamente, ela será inicializada com null pelo Java.

Já no Exercício 3, msg é uma variável local, definida dentro do método imprime(). Variáveis locais no Java precisam ser explicitamente inicializadas antes de serem usadas, caso contrário, o código não compila. Como msg não é inicializada antes de ser usada no método isEmpty(), o código não compila, como você corretamente observou.

Espero ter ajudado e bons estudos!

Vlw!

Grato pelo tempo, explicação e por dividir o conhecimento.

Grande abraço.