Maison > Java > javaDidacticiel > Pourquoi la concaténation d'une chaîne nulle en Java ne génère-t-elle pas d'exception NullPointerException ?

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

Mary-Kate Olsen
Libérer: 2024-12-02 18:39:11
original
697 Les gens l'ont consulté

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

Concaténation de chaînes nulles en Java

En Java, la concaténation d'une chaîne nulle avec une autre chaîne ne génère pas d'exception NullPointerException, comme on pourrait le faire attendre. Au lieu de cela, le résultat est une nouvelle chaîne avec "null" ajouté au début.

Pourquoi s'agit-il du comportement attendu ?

Selon la spécification du langage Java (JLS ):

"Si la référence [à la chaîne nulle] est nulle, elle est convertie en la chaîne 'null' (quatre caractères ASCII n, u, l, l)."

Par conséquent, la chaîne nulle est automatiquement convertie en "null" avant que la concaténation n'ait lieu.

Comment ce comportement est-il implémenté ?

Le Le compilateur optimise la concaténation des chaînes pour améliorer les performances. Pour ce faire, il utilise un objet StringBuilder pour accumuler les résultats de la concaténation.

Lorsqu'il rencontre une chaîne nulle :

  • Si la chaîne nulle est le premier argument, il appelle String.valueOf( ) pour la convertir en une chaîne non nulle ("null").
  • Si la chaîne nulle n'est pas le premier argument, il ajoute la chaîne nulle au StringBuilder puis appelle String.valueOf() sur le résultat.

Example

Considérez le code suivant :

String s = null;
s = s + "hello";
System.out.println(s); // prints "nullhello"
Copier après la connexion

Le compilateur optimise ce code dans l'équivalent suivant :

s = new StringBuilder(String.valueOf(s)).append("hello").toString();
Copier après la connexion

Puisque s est null, String.valueOf(s) renvoie "null", qui est ensuite ajouté au StringBuilder et converti en chaîne.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal