Différence entre null et vide (“”) Java Ssortingng

Quelle est la différence entre null et le "" (chaîne vide)?

J’ai écrit un code simple:

 Ssortingng a = ""; Ssortingng b = null; System.out.println(a==b); // false System.out.println(a.equals(b)); // false 

Les deux déclarations renvoient false . Il semble que je ne puisse pas trouver la différence réelle entre eux.

“” est une chaîne réelle, même si elle est vide.

null signifie toutefois que la variable Ssortingng ne pointe vers rien.

a==b renvoie false car “” et null n’occupent pas le même espace en mémoire – en d’autres termes, leurs variables ne pointent pas vers les mêmes objects.

a.equals(b) renvoie false parce que “” n’est pas nul, évidemment.

La différence est que puisque “” est une chaîne réelle, vous pouvez toujours invoquer des méthodes ou des fonctions comme

a.length()

a.subssortingng(0, 1)

etc.

Si la chaîne est égale à null, comme b, Java lance une NullPointerException si vous tentez d’appeler, par exemple:

b.length()


Si la différence que vous vous posez est == contre égal, c’est ceci:

== compare les références, comme si j’allais

 Ssortingng a = new Ssortingng(""); Ssortingng b = new Ssortingng(""); System.out.println(a==b); 

Cela afficherait false car j’ai alloué deux objects différents, et a et b indiquent différents objects.

Cependant, dans ce cas, a.equals(b) renverrait true, car equals for Ssortingngs renvoie true si et seulement si l’argument Ssortingng n’est pas nul et représente la même séquence de caractères.

Soyez averti, cependant, que Java a un cas particulier pour les chaînes.

 Ssortingng a = "abc"; Ssortingng b = "abc"; System.out.println(a==b); 

Vous penseriez que la sortie serait false , car elle devrait allouer deux chaînes différentes. En fait, Java va interner des chaînes littérales (celles qui sont initialisées comme a et b dans notre exemple). Alors faites attention, car cela peut donner des faux positifs sur le fonctionnement de ==.

Vous pouvez également comprendre la différence entre une chaîne vide et une chaîne vide de cette façon:

Différence entre null et 0 / chaîne vide

Ssortingng est un object et peut être nul

null signifie que l’object Ssortingng n’est pas instancié

“” est une valeur réelle de la chaîne d’object instanciée comme “aaa”

Voici un lien qui pourrait clarifier ce point http://download.oracle.com/javase/tutorial/java/concepts/object.html

Ce que vos déclarations vous disent 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é atsortingbuée.

Il pourrait être plus instructif d’essayer:

 System.out.println(a.length()); // 0 System.out.println(b.length()); // error; b is not an object 

“” est toujours une chaîne, ce qui signifie que vous pouvez appeler ses méthodes et obtenir des informations significatives. null est une variable vide – il n’y a littéralement rien là-bas.

Il y a une différence assez importante entre les deux. La chaîne vide "" est la chaîne qui ne contient aucun caractère. ” C’est une chaîne réelle qui a une longueur bien définie. Toutes les opérations de chaîne standard sont bien définies sur la chaîne vide – vous pouvez la convertir en minuscule, rechercher l’index d’un caractère, etc. La chaîne null est “pas de chaîne du tout”. Il n’a pas de longueur parce que ce n’est pas une chaîne du tout. Essayer d’appliquer une opération de chaîne standard à la chaîne null provoquera une NullPointerException à l’exécution.

null signifie que le nom ne fait référence à aucun object instancié. “” signifie une chaîne vide.

Ici, on fait référence à un object qui se trouve être une chaîne vide. b ne fait référence à aucun object car il est nul.

ici a is an Object mais b(null) n’est pas un object c’est une référence nulle

 System.out.println(a instanceof Object); // true System.out.println(b instanceof Object); // false 

voici ma réponse similaire

En Java, un type de référence atsortingbué null n’a aucune valeur . Une chaîne atsortingbuée "" a une valeur: une chaîne vide, c’est-à-dire une chaîne sans caractère. Lorsqu’une variable est affectée à null cela signifie qu’il n’y a aucun object sous-jacent d’aucune sorte, de chaîne ou autre.

 Ssortingng s = ""; s.length(); Ssortingng s = null; s.length(); 

Une référence à une chaîne vide "" pointe vers un object dans le tas – vous pouvez donc y appeler des méthodes.

Mais une référence à null n’a aucun object à pointer dans le tas et vous obtiendrez donc une NullPointerException .

“” et null les deux sont différents. le premier signifie, dans le cadre de la déclaration de variable de chaîne, que la constante de chaîne a été créée dans le pool de chaînes et que de la mémoire a été affectée à ce dernier.

Mais lorsque nous le déclarons avec null, il vient juste d’être instancié jvm, mais aucune mémoire n’a été allouée pour cela. par conséquent, si vous essayez d’accéder à cet object en le cochant avec la variable “” – vide, cela ne peut pas empêcher une exception nullpointerexception. Veuillez trouver ci-dessous un cas d’utilisation.

 public class SsortingngCheck { public static void main(Ssortingng[] args) { // TODO Auto-generated method stub Ssortingng s1 = "siddhartha"; Ssortingng s2 = ""; Ssortingng s3 = null; System.out.println("length s1 ="+s1.length()); System.out.println("length s2 ="+s2.length()); //this piece of code will still throw nullpointerexception . if(s3 != ""){ System.out.println("length s3 ="+s3.length()); } } 

}

La chaîne vide est distincte d’une référence nulle en ce sens que, dans un langage de programmation orienté object, une référence nulle à un type chaîne ne pointe pas sur un object chaîne et provoque une erreur si l’une d’entre elle tente d’y effectuer une opération. La chaîne vide est toujours une chaîne sur laquelle des opérations de chaîne peuvent être tentées.

De l’article de Wikipedia sur la chaîne vide .

Une chaîne peut être vide ou avoir une valeur null . Si une chaîne est null , elle ne fait référence à rien dans la mémoire. Essayez s.length()>0 . En effet, si une chaîne est vide, elle renvoie toujours une longueur de 0. Donc, si vous n’entrez rien pour la même chose, alors elle continuera à boucler car elle n’enregistre pas la chaîne comme null . Alors que si vous vérifiez la longueur, elle sortira de sa boucle.

Ce concept peut être mieux compris en mathématiques. Avez-vous déjà essayé de diviser un nombre (pas zéro) par 0 en utilisant une calculasortingce, par exemple 7/0? Vous obtiendrez un résultat qui ressemble à quelque chose comme ceci: undefined , not a number , null etc. Cela signifie que l’opération est impossible, pour certaines raisons (laissez ces raisons pour en discuter un jour).

Maintenant, effectuez ceci: 0/7. Vous obtiendrez la sortie 0. Cela signifie que l’opération est possible et peut être exécutée, mais la réponse est juste 0 car rien n’est laissé après la division. Il y a une sortie valide et cette sortie est zéro.

Dans le premier exemple, non seulement la sortie était invalide, mais l’opération ne pouvait pas être exécutée. Ceci s’apparente à une chaîne null en Java. Le deuxième exemple s’apparente à empty chaîne empty .