"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o operador ternário permite retorno nulo para int enquanto uma instrução if não permite?

Por que o operador ternário permite retorno nulo para int enquanto uma instrução if não permite?

Publicado em 13/11/2024
Navegar:766

Why Does the Ternary Operator Allow Null Return for int While an if Statement Doesn't?

Operador ternário vs. instrução if para retorno nulo de int

Em Java, o operador ternário (?:) permite a atribuição de null para uma variável do tipo int, mesmo que int seja um tipo de dados primitivo que não suporta valores nulos. Considere o seguinte trecho de código:

int temp() {
    return true ? null : 0;
}

Neste código, o operador ternário atribui nulo à variável temp se true for a condição avaliada, caso contrário, atribui 0. O compilador permite esta atribuição sem emitir nenhum erro. No entanto, quando o método é executado, ele lançará uma NullPointerException em tempo de execução porque null não é um valor válido para int.

Em contraste com o operador ternário, a instrução if não permite tais atribuições nulas a variáveis ​​de tipos primitivos. Por exemplo:

int same() {
    if (true) {
        return null;
    } else {
        return 0;
    }
}

Este código irá gerar um erro em tempo de compilação com a mensagem "tipos incompatíveis: null não pode ser convertido em int." A razão para essa discrepância está na maneira como o compilador trata o valor nulo.

No caso do operador ternário, o compilador interpreta o literal nulo como uma referência nula a um Inteiro, a classe wrapper para int. Isso se deve às regras do compilador para autoboxing e unboxing: ao converter de um tipo primitivo para um tipo de objeto, a Java Virtual Machine (JVM) envolve automaticamente o valor primitivo no wrapper de objeto correspondente.

Como int é um wrapper de objeto correspondente. tipo primitivo, o compilador tentará desempacotar o valor nulo retornado pelo operador ternário, o que resulta em NullPointerException.

Por outro lado, a instrução if faz não execute esse processo de unboxing e o literal nulo permanecerá como uma referência nula para Object. Como o tipo de retorno do método same() é int, o compilador não pode converter a referência nula em int, daí o erro em tempo de compilação.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3