"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi la concaténation de chaînes nulles en Java ne génère-t-elle pas d'exception NullPointerException ?

Pourquoi la concaténation de chaînes nulles en Java ne génère-t-elle pas d'exception NullPointerException ?

Publié le 2024-11-17
Parcourir:153

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

Concaténation de chaînes nulles en Java

En Java, la concaténation de chaînes nulles peut sembler contre-intuitive, conduisant à l'attente d'une NullPointerException. Cependant, cette opération s'exécute avec succès, ce qui donne une chaîne contenant « null » suivie de la chaîne concaténée.

Pourquoi cela fonctionne-t-il ?

Selon la spécification du langage Java. (JLS) 8, § 15.18.1, les références nulles sont explicitement converties en chaîne « null » lors de la concaténation de chaînes. Cette conversion se produit avant tout appel de méthode, garantissant que les NullPointerExceptions ne sont pas levées.

Comment ça marche ?

Le compilateur Java transforme l'expression de concaténation en une séquence équivalente de appels de méthode. Dans le cas de s = s "hello", le compilateur génère un code similaire à :

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

La méthode append de StringBuilder gère les arguments nuls avec élégance. Si null est le premier argument, String.valueOf() est invoqué pour le convertir en chaîne.

Alternativement, l'expression s = "hello" s serait transformée en :

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

Dans ce cas, la méthode append prend null comme deuxième argument et le délègue à String.valueOf().

Remarque :

Les compilateurs Java peuvent optimiser la concaténation de chaînes différemment pour améliorer les performances, en utilisant des techniques telles que le pooling StringBuilder. Par conséquent, le code équivalent exact généré peut varier en fonction du compilateur utilisé.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3