Différence entre la chaîne Java nulle et vide ("")


Quelle est la différence entre null et le "" (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 instructions renvoient false. Il semble, je ne suis pas en mesure de trouver quelle est la différence réelle entre eux.

Author: Nadim Baraky, 2011-01-26

13 answers

"" est une chaîne réelle, bien que vide.

Null, cependant, signifie que la variable Chaîne 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 objets.

a.equals(b) renvoie faux car "" n'est pas égal à null, évidemment.

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

a.length()

a.substring(0, 1)

Et ainsi de suite.

Si la chaîne est égale à null, comme b, Java lancerait un NullPointerException si vous essayiez d'invoquer, disons:

b.length()


Si la différence que vous vous demandez est = = par rapport à equals, c'est ceci:

== compare les références, comme si je suis allé

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

Cela produirait false parce que j'ai alloué deux objets différents, et a et b pointent vers des objets différents.

Cependant, a.equals(b) dans ce case retournerait true, car equalsfor Strings retournerait 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 particulier pour les chaînes.

String a = "abc";
String 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 chaînes littérales (celles qui sont initialisées comme a et b dans notre exemple). Donc soyez prudent, parce que cela peut donner des faux positifs sur la façon dont == fonctionne.

 188
Author: Zach L, 2015-10-22 11:33:17

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

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

 123
Author: mikiqex, 2017-08-21 10:33:38

String est un Objet et peut être null

Null signifie que l'objet String n'a pas été instancié

""est une valeur réelle de la chaîne d'objet instanciée comme" aaa "

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

 13
Author: Aba Dov, 2011-01-26 06:55:46

Ce que vos déclarations vous disent, c'est simplement 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 pourrait être plus éclairant 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.

 12
Author: Arkaaito, 2011-01-26 06:56:23

Il y a une différence assez significative entre les deux. La chaîne vide "" "est la chaîne qui n'a pas de caractères."C'est une chaîne qui a une longueur définie. Toutes les opérations de chaîne standard sont bien définies sur la chaîne vide-vous pouvez la convertir en minuscules, rechercher l'index d'un caractère, etc. La chaîne null null est "pas de chaîne du tout."Il n'a pas de longueur car ce n'est pas du tout une chaîne. Essayer d'appliquer n'importe quelle chaîne standard l'opération sur la chaîne null provoquera un NullPointerException lors de l'exécution.

 9
Author: templatetypedef, 2011-01-26 06:56:05

Ici a is an Object, mais b(null) est pas un Objet c'est une référence null

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

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

Voici mon semblable réponse

 9
Author: Community, 2017-05-23 11:47:26

Null signifie que le nom ne fait référence à aucun objet instancié. "" signifie une chaîne vide.

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

 8
Author: Shamim Hafiz, 2011-01-26 06:57:25

En Java, un type de référence attribué à nulln'a aucune valeur. Une chaîne affectée "" est une valeur: une chaîne vide, c'est à dire une chaîne de n caractères. Lorsqu'une variable est assignée null, cela signifie qu'il n'y a pas d'objet sous-jacent d'aucune sorte, chaîne ou autre.

 5
Author: JUST MY correct OPINION, 2011-01-26 06:57:16

"" et null les deux sont différents . le premier signifie que dans le cadre de la déclaration de variable de chaîne, la constante de chaîne a été créée dans le pool de chaînes et une partie de la mémoire a été affectée pour la même chose.

Mais lorsque nous le déclarons avec null alors il vient 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 objet en le vérifiant avec "" - variable vide, il ne peut pas empêcher nullpointerexception . Veuillez trouver ci-dessous un cas d'utilisation.

public class StringCheck {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    String s1 = "siddhartha";
    String s2 = "";
    String 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());
    }
}

}

 4
Author: siddhartha, 2015-06-30 13:05:31
String s = "";
s.length();

String s = null;
s.length();

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

Mais une référence pointant vers null n'a pas d'objet à pointer dans le tas et vous obtiendrez donc un NullPointerException.

 4
Author: Mukesh Kumar, 2015-08-14 15:14:46

La chaîne vide est distincte d'un référence nulle en cela dans un langage de programmation orienté objet une nulle référence à un type de chaîne ne pointe pas vers un objet string et provoquera une erreur ont été l'un d'essayer de effectuez n'importe quelle opération dessus. Le vide string est toujours une chaîne sur laquelle des opérations de chaîne peuvent être tentées.

De l'article wikipedia sur chaîne vide.

 1
Author: weltraumpirat, 2011-01-26 06:59:02

Une chaîne peut être vide ou avoir une valeur null. Si une chaîne est null, elle ne fait référence à rien en 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 il continuera à faire une boucle car il n'enregistre pas la chaîne comme null. Alors que si vous vérifiez la longueur, il sortira de sa boucle.

 0
Author: Bibiana, 2016-12-04 18:12:19

Ce concept peut être mieux compris à partir des mathématiques. Avez-vous déjà essayé de diviser un nombre (pas zéro) par 0 en utilisant une calculatrice, par exemple 7/0? Vous obtiendrez un résultat qui ressemble à quelque chose de ce: 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, effectuez 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 juste 0 parce qu'il ne reste plus rien après la division. Il y a une sortie valide et cette sortie est nulle.

Dans le premier exemple, non seulement la sortie était invalide, mais l'opération n'était pas possible. Cela s'apparente à null string en java. Le deuxième exemple s'apparente à empty string.

 0
Author: , 2017-11-02 16:47:01