La différence entre la valeur null et vide (“”) Java String
Quelle est la différence entre null
et la ""
(chaîne vide)?
J'ai écrit un code simple:
String a = "";
String b = null;
System.out.println(a == b); //false
System.out.println(a.equals(b)); //false
Les deux déclarations de retour false
. Il semble, je ne suis pas en mesure de trouver quelle est la réelle différence entre eux.
- Comparer avec
b.equals(a)
-- mais ne pas utiliser de==
pour la chaîne de la comparaison que "ça ne marchera pas" par d'autres moyens. Lenull
valeur (qui est différente de celle d'une chaîne vide""
, une Chaîne valide exemple) ne peut jamais avoir une méthode appelée sur elle. En plaçant le "non nulle" (généralement une valeur constante ou littéral) sur le côté gauche de l'égalité est "Yoda le conditionnel" ou certains-tel.
Vous devez vous connecter pour publier un commentaire.
"" est une chaîne réelle, même si elle est vide.
null, cependant, signifie que la variable de Chaîne de points à rien.
a==b
renvoie faux car "" et nul n'occupent pas le même espace dans la mémoire--en d'autres termes, les variables ne pointent pas sur les mêmes objets.a.equals(b)
renvoie faux car "" n'est pas égal à null, évidemment.La différence, c'est que depuis "" est une chaîne réelle, vous pouvez toujours appeler des méthodes ou des fonctions comme
a.length()
a.substring(0, 1)
et ainsi de suite.
Si la Chaîne est égale à null, comme b, Java jeter un
NullPointerException
si vous avez essayé de l'invocation, de dire:b.length()
Si la différence vous vous demandez quel est == rapport d'égal à égal, c'est ceci:
== compare les références, comme si j'allais
Qui serait sortie de fausses parce que j'ai attribué deux objets différents, et a et b le point sur différents objets.
Cependant,
a.equals(b)
dans ce cas serait de retour vrai, parce queequals
pour les Chaînes retournera true si et seulement si la Chaîne d'argument n'est pas null et représente la même séquence de caractères.Soyez averti, cependant, que Java a un cas spécial pour les Chaînes.
On pourrait penser que la sortie serait
false
, puisqu'il devrait allouer des deux Chaînes. En fait, Java stagiaire les Chaînes littérales (ceux qui sont initialisés comme a et b dans notre exemple). Donc soyez prudent, parce que cela peut donner quelques faux positifs sur la façon dont == fonctionne.intern
a expiré. Vous pouvez faire référence à un autre site pour lire à ce sujet: weblogs.java.net/blog/enicholas/archive/2006/06/...String a = null
et puis j'ai ajouter c'est une Chaîne commea+= "example"
, lorsque j'imprime, pourquoi ne s'affichenullexample
si la valeur null n'est pas une Chaîne de caractères?"num: " + 20
vous donne la chaîne"num: 20"
. Est-ce à dire que20
est une chaîne de caractères? (il n'est pas,20
est un nombre). Même cas pournull
: ce n'est pas une chaîne, mais il peut être transformé en un, si vous essayez de l'ajouter.Vous pouvez également comprendre la différence entre la valeur null et une chaîne vide de cette façon:
Chaîne de caractères est un Objet et peut être null
null signifie que l'Objet de type String n'a pas été instancié
"" est une valeur réelle de l'Objet instancié Chaîne comme "aaa"
Voici un lien qui pourrait clarifier ce point http://download.oracle.com/javase/tutorial/java/concepts/object.html
if (mp==null){do something}
.Ce que vos déclarations sont vous dit, c'est juste que "" n'est pas la même chose que null - ce qui est vrai. "" est une chaîne vide; null signifie qu'aucune valeur n'a été affectée.
Il serait peut-être plus instructif d'essayer:
"" est toujours une chaîne de caractères, ce qui signifie que vous pouvez appeler ses méthodes et d'obtenir des informations significatives. null est une variable vide - il n'y a littéralement rien.
Il y a une jolie différence significative entre les deux. La chaîne vide
""
est "la chaîne qui n'a pas de caractère." C'est une chaîne qui a une longueur définie. Tous de la norme opérations de la chaîne sont bien définies sur la chaîne vide - vous pouvez le convertir en minuscules, rechercher l'index de certains caractère, etc. La chaîne nullnull
est "pas de chaîne à tous." Il n'a pas une longueur parce que ce n'est pas une chaîne de caractères à tous. En essayant de l'appliquer à aucune norme opération de chaîne à la chaîne vide sera la cause d'uneNullPointerException
au moment de l'exécution.ici
a is an Object
maisb(null)
est pas un Objet c'est une référence nullvoici mon semblable réponse
a
etb
sont des références.a
est une référence à un objet instancié.b
est une référence sans objet instancié (d'où le terme de "référence null").null
valeur et la différence entre les objets et les variables.null signifie le nom n'est pas le référencement de tout objet instancié. "" signifie une chaîne vide.
Ici un référence à un objet qui se trouve être une chaîne vide. b n'est pas le référencement de tout objet de valeur null.
En Java d'un type de référence attribué
null
a aucune valeur à tous les. Une chaîne affectée""
a une valeur: une chaîne vide, c'est à dire une chaîne de n caractères. Lorsqu'une variable est affectéenull
il n'y a pas d'objet sous-jacent de toute nature, de chaîne ou autre."" et null les deux sont différents . le premier signifie que la partie de la chaîne de la déclaration de la variable de la chaîne constante a été créé dans la chaîne de la piscine et de la mémoire a été attribué pour la même chose.
Mais quand nous sommes à déclarer avec null alors il a juste été instancié de la jvm , mais pas de la mémoire a été allouée pour elle. par conséquent, si vous essayez d'accéder à cet objet en vérifiant avec "" - vide variable , il ne peut pas empêcher nullpointerexception . Veuillez trouver ci-dessous un cas d'utilisation.
}
Une référence à une chaîne vide
""
points d'un objet dans le tas - de sorte que vous pouvez appeler des méthodes sur elle.Mais une référence vers
null
a pas d'objet à point dans le tas et ainsi vous aurez uneNullPointerException
.À partir de l'article de wikipédia sur chaîne vide.
String s=null;
Chaîne n'est pas initialisé à null. si une opération de chaîne essayé qu'elle peut renvoyer null pointer exception
String t="null";
C'est un littéral de chaîne avec la chaîne de valeur "null" même comme t = "xyz". Il ne sera pas jeter pointeur null.
String u="";
C'est comme une chaîne vide , Il ne sera pas jeter pointeur null.
Une chaîne de caractères peut être vide ou avoir un
null
valeur. Si une chaîne estnull
, il n'est pas en se référant à quelque chose dans la mémoire. Essayezs.length()>0
. C'est parce que si une chaîne est vide, il renvoie toujours une longueur de 0. Donc, si vous n'entrez rien pour la même chose, alors il va continuer à en boucle depuis il n'a pas d'enregistrer la chaîne commenull
. Alors que si vous signez pour la longueur, puis il va sortir de la boucle.Ce concept peut être mieux compris à partir de mathématiques. Avez-vous déjà essayé la division d'un nombre (non nul) en 0 à l'aide d'une calculatrice électronique.g 7/0? Vous obtiendrez un résultat qui ressemble à quelque chose:
undefined
,not a number
,null
etc. Cela signifie que l'opération est impossible, pour certaines raisons (laissons ces raisons d'être discuté l'autre jour).Maintenant, effectuer ceci: 0/7. Vous obtiendrez la sortie, 0. Cela signifie que l'opération est possible et peut être exécuté, mais la réponse est 0, car rien n'est laissé après la division. Il y a un résultat valide et que la sortie est égale à zéro.
Dans le premier exemple, n'était pas seulement la sortie non valide, l'opération n'a pas été possible d'exécuter. Ceci est similaire à la
null
chaîne de caractères en java. Le deuxième exemple est semblable àempty
chaîne.J'ai observé de plus si une chaîne vide est une chaîne vide, il détient toujours une adresse mémoire valide. Mais NULLE pointeur pointe vers rien.
https://shirleyanengineer.blogspot.com/2019/01/does-empty-string-has-address.html
Lorsque vous écrivez
String a = "";
Cela signifie qu'il y est une variable 'a' de type chaîne de caractères qui pointe vers un objet de référence dans la chaîne de la piscine qui a une valeur "". En tant que variable
a
est en possession d'un permis de chaîne de référence de l'objet, toutes les méthodes de chaîne peut être appliqué ici.Alors que quand vous écrivez
String b = null;
Cela signifie qu'il n'y est une variable
b
de type chaîne de caractères qui désigne une référence inconnue. Et de toute opération sur les inconnus de référence entraîne uneNullPointerException
.Maintenant, laissez-nous évaluer les expressions ci-dessous.
En terme simple,
"" est un vide Chaîne
null est un vide Variable de Chaîne.