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
Mary-Kate Olsenoriginal
2024-12-02 18:39:11699parcourir

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"

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

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

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!

Déclaration:
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