1
resposta

Código nunca executado.

void x(int i) throws IOException {
        if(++i<0) return;
        x(-1);
        System.out.println("c"); // Está linha nunca será executada, o compilador nesse caso não consegue identificar isso em tempo de compilação?
    }
// Reescrevendo para

void x(int i) throws IOException {
        if(++i<0) return;
        if(true) x(-1);
        System.out.println("c"); // Nesse caso o compilador identifica?
    }

1 resposta

Oi Manoel,

Em nenhum dos casos o compilador vai dar erro. Não dá para garantir que as linhas do System.out.println não serão executadas. Depois de executar o código dentro do if, a linha System.out.println será executada (do ponto de vista de compilação, não de runtime). Se você trocar por while(true) ai sim o compilador irá acusar um erro :)

Abraço!