Maison > Java > javaDidacticiel > 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 ?

DDD
Libérer: 2024-11-19 10:10:03
original
979 Les gens l'ont consulté

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();
Copier après la connexion

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();
Copier après la connexion

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é.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal