Verschil tussen null en lege string

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 Stringis toegewezen aan s1.
In dit geval is s1.length()hetzelfde als "".length(), wat zoals verwacht 0oplevert.

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 nullPointerExceptionoplevert, aangezien je dat niet kunt aanroepmethoden op Nullvariabelen (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%

Nullbetekent niets. Het is gewoon een letterlijke. Nullis 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 szou gebruiken, zou het eigenlijk een waarde van Nullhebben, 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

Nullis 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.

Nullis 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.

Other episodes