Quelle est la différence entre une chaîne nulle (String s = null
) et une chaîne vide (String s = ""
)?
C'est ce que j'ai
String s1 = ""; //print statement does not print any thing for s1 but s1.length()=0
String s2 = null;//print statement prints "null" for s2 but s2.length() gives exception
Qu'est-ce que ça veut dire?
String s1 = "";
signifie que le String
vide est attribué à s1
. Dans ce cas, s1.length()
est identique à "".length()
, ce qui donnera 0
comme prévu.
String s2 = null;
signifie que (null
) ou "pas de valeur du tout" est attribué à s2
. Donc, celui-ci, s2.length()
est identique à null.length()
, ce qui donnera un NullPointerException
car vous ne pouvez pas appeler de méthodes sur null
variables (pointeurs, en quelque sorte) en Java.
En outre, un point, la déclaration
String s1;
A effectivement le même effet que:
String s1 = null;
Tandis que
String s1 = "";
Est-ce, comme dit, une chose différente.
Null
ne veut rien dire. C'est juste un littéral. Null
est la valeur de la variable de référence. Mais la chaîne vide est vide. Cela donne le length=0
. La chaîne vide est une valeur vide, cela signifie que la chaîne n'a rien.
Aucune méthode ne peut être invoquée sur un objet auquel est attribuée une valeur NULL
. Cela donnera un nullPointerException
. Par conséquent, s2.length()
donne une exception.
Lorsque les variables Object sont initialement utilisées dans un langage tel que Java, elles n'ont absolument aucune valeur - pas zéro, mais littéralement aucune valeur - c'est-à-dire null
Par exemple: String s;
Si vous utilisiez s
, il aurait en fait une valeur de null
car il ne contient rien.
Une chaîne vide, cependant, est une valeur - c'est une chaîne sans caractères.
String s; //Inits to null
String a =""; //A blank string
Null
est essentiellement 'rien' - c'est la 'valeur' par défaut (pour utiliser le terme librement) que Java) affecte à toute variable Object non initialisée.
Null
n'est pas vraiment une valeur - et en tant que telle, n'a pas de propriétés. Ainsi, appeler tout ce qui est censé renvoyer une valeur, tel que .length()
, renverra invariablement une erreur, car rien ne peut avoir de propriétés.
Pour aller plus en profondeur, en créant s1 = "";
, Vous initialisez un objet qui peut avoir des propriétés et qui occupe un espace mémoire suffisant. En utilisant s2;
, Vous indiquez que le nom de la variable est une chaîne, mais vous n'affectez aucune valeur à ce stade.