Differenza tra stringa Java null e empty ("")


Qual è la differenza tra null e "" (stringa vuota)?

Ho scritto un codice semplice:

String a = "";
String b = null;

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

Entrambe le istruzioni restituiscono false. Sembra, non sono in grado di trovare qual è la vera differenza tra loro.

Author: Nadim Baraky, 2011-01-26

13 answers

"" è una stringa reale, anche se vuota.

Null, tuttavia, significa che la variabile Stringa non punta a nulla.

a==b restituisce false perché "" e null non occupano lo stesso spazio in memoria-in altre parole, le loro variabili non puntano agli stessi oggetti.

a.equals(b) restituisce false perché "" non è uguale a null, ovviamente.

La differenza è però che dal momento che "" è una stringa reale, è ancora possibile invocare metodi o funzioni su di esso come

a.length()

a.substring(0, 1)

E così via.

Se la stringa è uguale a null, come b, Java genererebbe un NullPointerException se hai provato a richiamare, diciamo:

b.length()


Se la differenza che ti stai chiedendo è = = rispetto a uguale, è questa:

== confronta i riferimenti, come se andassi

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

Ciò produrrebbe false perché ho allocato due oggetti diversi e a e b puntano a oggetti diversi.

Tuttavia, a.equals(b) in questo case restituirebbe true, perché equals per le stringhe restituirà true se e solo se la stringa dell'argomento non è null e rappresenta la stessa sequenza di caratteri.

Attenzione, però, che Java ha un caso speciale per le stringhe.

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

Si potrebbe pensare che l'output sarebbe false, dal momento che dovrebbe allocare due stringhe diverse. In realtà, Java intern stringhe letterali (quelle che sono inizializzate come a e b nel nostro esempio). Quindi stai attento, perché questo può dare alcuni falsi positivi su come funziona==.

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

Puoi anche capire la differenza tra stringa nulla e vuota in questo modo:

Differenza tra null e 0/stringa vuota

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

String è un Oggetto e può essere null

Null indica che l'Oggetto String non è stato istanziato

""è un valore effettivo della stringa Oggetto istanziato come" aaa "

Ecco un link che potrebbe chiarire quel punto http://download.oracle.com/javase/tutorial/java/concepts/object.html

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

Ciò che le tue affermazioni ti stanno dicendo è solo che "" non è lo stesso di null - che è vero. ""è una stringa vuota; null significa che non è stato assegnato alcun valore.

Potrebbe essere più illuminante provare:

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

"" è ancora una stringa, il che significa che puoi chiamare i suoi metodi e ottenere informazioni significative. null è una variabile vuota-non c'è letteralmente nulla lì.

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

C'è una differenza piuttosto significativa tra i due. La stringa vuota "" è "la stringa che non contiene caratteri."È una stringa reale che ha una lunghezza ben definita. Tutte le operazioni di stringa standard sono ben definite sulla stringa vuota: puoi convertirla in minuscolo, cercare l'indice di alcuni caratteri in esso contenuti, ecc. La stringa null null è "nessuna stringa."Non ha una lunghezza perché non è affatto una corda. Cercando di applicare qualsiasi stringa standard l'operazione alla stringa null causerà un NullPointerException in fase di runtime.

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

Qui a is an Object ma b(null) è non un Oggetto è un riferimento nullo

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

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

Ecco {[9] } la mia risposta simile

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

Null significa che il nome non fa riferimento a nessun oggetto istanziato. "" significa una stringa vuota.

Qui un fa riferimento ad un oggetto che sembra essere una stringa vuota. b non fa riferimento a nessun oggetto come null.

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

In Java un tipo di riferimento assegnato nullha nessun valore. Una stringa assegnata "" ha un valore: una stringa vuota, vale a dire una stringa senza caratteri. Quando a una variabile viene assegnato null significa che non vi è alcun oggetto sottostante di alcun tipo, stringa o altro.

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

"" e null entrambi sono diversi . il primo significa che come parte della dichiarazione della variabile stringa la costante di stringa è stata creata nel pool di stringhe e una certa memoria è stata assegnata per lo stesso.

Ma quando lo stiamo dichiarando con null allora è stata appena istanziata jvm , ma nessuna memoria è stata allocata per esso. pertanto se si sta tentando di accedere a questo oggetto controllandolo con "" - variabile vuota, non può impedire nullpointerexception . Si prega di trovare sotto un caso d'uso.

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();

Un riferimento a una stringa vuota "" punta a un oggetto nell'heap, in modo da poter chiamare metodi su di esso.

Ma un riferimento che punta a null non ha alcun oggetto da puntare nell'heap e quindi otterrai un NullPointerException.

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

La stringa vuota è distinta da riferimento nullo in quello in un linguaggio di programmazione orientato agli oggetti a riferimento null a un tipo di stringa non punta a un oggetto string e causerà un errore se si tenta di eseguire qualsiasi operazione su di esso. Il vuoto stringa è ancora una stringa su cui le operazioni stringa possono essere tentate.

Dall'articolo di wikipedia su stringa vuota .

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

Una stringa può essere vuota o avere un valore null. Se una stringa è null, non si riferisce a nulla in memoria. Prova s.length()>0. Questo perché se una stringa è vuota, restituisce ancora una lunghezza di 0. Quindi, se non inserisci nulla per lo stesso, continuerà comunque il loop poiché non registra la stringa come null. Mentre se controlli la lunghezza, uscirà dal suo ciclo.

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

Questo concetto può essere meglio compreso dalla matematica. Hai mai provato a dividere un numero (non zero) per 0 usando una calcolatrice, ad esempio 7/0? Otterrai un risultato che assomiglia a qualcosa di questo: undefined, not a number, null ecc. Ciò significa che l'operazione è impossibile, per alcuni motivi (lasciamo che questi motivi siano discussi un altro giorno).

Ora, esegui questo: 0/7. Otterrai l'output, 0. Ciò significa che l'operazione è possibile e può essere eseguita, ma la risposta è solo 0 perché nulla è rimasto dopo la divisione. C'è un output valido e quell'output è zero.

Nel primo esempio, non solo l'output non era valido, ma l'operazione non era possibile eseguire. Questo è simile alla stringa null in java. Il secondo esempio è simile a empty string.

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