"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 a concatenação de strings nulas em Java não gera uma NullPointerException?

Por que a concatenação de strings nulas em Java não gera uma NullPointerException?

Publicado em 17/11/2024
Navegar:366

Why Doesn\'t Concatenating Null Strings in Java Throw a NullPointerException?

Concatenando strings nulas em Java

Em Java, concatenar strings nulas pode parecer contraintuitivo, levando à expectativa de uma NullPointerException. No entanto, esta operação é executada com sucesso, resultando em uma string contendo "null" seguida pela string concatenada.

Por que isso funciona?

De acordo com a especificação da linguagem Java (JLS) 8, § 15.18.1, referências nulas são explicitamente convertidas na string "null" durante a concatenação de strings. Essa conversão ocorre antes de qualquer chamada de método, garantindo que NullPointerExceptions não sejam lançadas.

Como funciona?

O compilador Java transforma a expressão de concatenação em uma sequência equivalente de chamadas de método. No caso de s = s "hello", o compilador gera código semelhante a:

s = new StringBuilder(String.valueOf(s)).append("hello").toString();

O método append de StringBuilder lida com argumentos nulos normalmente. Se null for o primeiro argumento, String.valueOf() é invocado para convertê-lo em uma string.

Alternativamente, a expressão s = "hello" s seria transformada em:

s = new StringBuilder("hello").append(s).toString();

Nesse caso, o método append toma null como o segundo argumento e o delega para String.valueOf().

Nota:

Os compiladores Java podem otimizar a concatenação de strings de maneira diferente para melhorar o desempenho, usando técnicas como o pooling do StringBuilder. Portanto, o código equivalente exato gerado pode variar dependendo do compilador utilizado.

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