web-dev-qa-db-fra.com

Différence entre chaîne nulle et chaîne vide

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?

43
Shakeeb Ayaz

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.

61
acdcjunior

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.

10
JDGuide

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.

6
Divya Rodrigues

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.

4
Singular1ty