Wat is het verschil tussen een null-tekenreeks (String s = null
) en een lege tekenreeks (String s = ""
)?
Dit is wat ik heb:
String s1 = ""; //print statement does not print any thing for s1 but s1.length()=0
String s2 = null;//print statement prints "null" for s2 but s2.length() gives exception
Wat betekent het?
Antwoord 1, autoriteit 100%
String s1 = "";
betekent dat de lege String
is toegewezen aan s1
.
In dit geval is s1.length()
hetzelfde als "".length()
, wat zoals verwacht 0
oplevert.
String s2 = null;
betekent dat (Null
) of “helemaal geen waarde” is toegewezen aan s2
. Dus deze, s2.length()
is hetzelfde als null.length()
, wat een nullPointerException
oplevert, aangezien je dat niet kunt aanroepmethoden op Null
variabelen (pointers, soort van) in Java.
Ook een punt, de verklaring
String s1;
Heeft eigenlijk hetzelfde effect als:
String s1 = null;
Terwijl
String s1 = "";
Is, zoals gezegd, iets anders.
Antwoord 2, autoriteit 14%
Null
betekent niets. Het is gewoon een letterlijke. Null
is de waarde van de referentievariabele. Maar een lege string is blanco. Het geeft de length=0
. Lege tekenreeks is een lege waarde, wat betekent dat de tekenreeks niets heeft.
Antwoord 3, autoriteit 9%
Er kan geen methode worden aangeroepen op een object waaraan een Null
-waarde is toegewezen. Het geeft een nullPointerException
. Daarom geeft s2.length()
een uitzondering.
Antwoord 4, autoriteit 6%
Als objectvariabelen in eerste instantie worden gebruikt in een taal als Java, hebben ze absoluut geen waarde – niet nul, maar letterlijk geen waarde – dat is Null
Bijvoorbeeld: String s;
Als je s
zou gebruiken, zou het eigenlijk een waarde van Null
hebben, omdat het absoluut niets bevat.
Een lege tekenreeks is echter een waarde – het is een tekenreeks zonder tekens.
String s; //Inits to null
String a =""; //A blank string
Null
is in wezen ‘niets’ – het is de standaard ‘waarde’ (om de term losjes te gebruiken) die Java toewijst aan elke objectvariabele die niet is geïnitialiseerd.
Null
is niet echt een waarde – en heeft als zodanig geen eigenschappen. Dus het aanroepen van iets dat bedoeld is om een waarde te retourneren – zoals .length()
, zal altijd een fout retourneren, omdat ‘niets’ geen eigenschappen kan hebben.
Om dieper in te gaan, door s1 = "";
aan te maken, initialiseert u een object, dat eigenschappen kan hebben en relevante ruimte in het geheugen in beslag neemt. Door s2;
te gebruiken, wijst u die variabelenaam aan als een tekenreeks, maar kent u op dat moment geen waarde toe.