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

Quelle est la différence entre null et "" (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.

119
demandé sur Nadim Baraky 2011-01-26 09:51:38

13 réponses

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

nul, cependant, signifie que la variable chaîne pointe à rien.

a==b retourne false parce que "" Et null n'occupent pas le même espace dans la mémoire--en d'autres termes, leurs variables ne pointent pas vers les mêmes objets.

a.equals(b) retourne false parce que "" n'est pas nul, évidemment.

la différence 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 lancerait un NullPointerException si vous essayez d'invoquer, dites:

b.length()


, c'est ça:

= = compare des références, comme si j'allais

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

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

Toutefois, a.equals(b) dans ce cas serait de retour vrai, parce que equals 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.

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

on pourrait penser que la sortie serait false , puisqu'elle devrait allouer deux chaînes différentes. En fait, Java va intern literal Strings (ceux qui sont initialisés comme a et b dans notre exemple). Alors faites attention, parce que cela peut donner quelques faux positifs sur comment == fonctionne.

188
répondu Zach L 2015-10-22 11:33:17

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

Difference between null and 0/empty string

123
répondu mikiqex 2017-08-21 10:33:38

Chaîne de caractères est un Objet et peut être null

null signifie que L'objet 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

13
répondu Aba Dov 2011-01-26 06:55:46

ce que vos déclarations vous disent est juste que "" n'est pas la même chose que nul - 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:

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
répondu 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 a pas des caractères."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ères, etc. La chaîne nulle null est" aucune chaîne du tout."Il n'a pas une longueur parce que ce n'est pas une chaîne. En essayant de l'appliquer toute opération de chaîne de caractères standard vers la chaîne null causera un NullPointerException à l'exécution.

9
répondu templatetypedef 2011-01-26 06:56:05

ici a is an Object mais b(null) est pas un objet il 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

9
répondu Community 2017-05-23 11:47:26

null signifie que le nom ne fait référence à aucun objet instancié. " 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 puisqu'il est nul.

8
répondu Shamim Hafiz 2011-01-26 06:57:25

en Java un type de référence assigné null a aucune valeur . Une chaîne de caractères assignés "" a une valeur: une chaîne vide, c'est à dire une chaîne de n caractères. Quand une variable est assignée null cela signifie qu'il n'y a aucun objet sous-jacent de toute sorte, chaîne ou autre.

5
répondu JUST MY correct OPINION 2011-01-26 06:57:16

"" et null tous les deux sont différents . la première signifie que, dans le cadre de la déclaration de la variable string, la constante de la chaîne a été créée dans le pool de chaînes et qu'une certaine mémoire a été assignée pour la même valeur.

mais quand nous le déclarons avec null alors il vient d'être instanciated jvm , mais aucun mémoire n'a été alloué pour elle. par conséquent, si vous essayez d'accéder à cet objet de la vérification il avec " - la variable à blanc , 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
répondu 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 - de sorte que vous pouvez appeler des méthodes.

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

4
répondu Mukesh Kumar 2015-08-14 15:14:46

la corde vide est distincte d'un référence nulle dans celle d'un langage de programmation orienté objet une nulle référence à un type de chaîne ne pointe pas vers un objet string et causer une erreur étaient un pour essayer de effectuer toute opération sur elle. Le vide la corde est encore une corde sur laquelle on peut tenter des opérations de corde.

D'après l'article de wikipedia sur chaîne vide .

1
répondu weltraumpirat 2011-01-26 06:59:02

une chaîne de caractères peut être vide ou avoir une valeur null . Si une chaîne est null , elle ne se réfère à rien dans la mémoire. Essayez s.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 continuera à Boucler puisqu'il n'enregistre pas la chaîne comme null . Alors que si vous vérifiez la longueur, alors il sortira de sa boucle.

0
répondu 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 (et non pas zéro) par 0 en utilisant une calculatrice E. 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, exécutez ceci: 0/7. Vous obtiendrez la sortie, 0. Cela signifie que l'opération est possible et peut être exécuté, mais vous la réponse est juste 0 parce que rien ne reste après la division. Il y a une sortie valide et cette sortie est zéro.

dans le premier exemple, non seulement la sortie n'était pas valide, mais l'opération n'était pas possible à exécuter. C'est une chaîne similaire à null en java. Le second exemple est similaire à la chaîne empty .

0
répondu 2017-11-02 16:47:01