A karakterláncok belső működése és az alsztring metódusa - 1

– Szia Amigo!

– Szia, Ellie.

"Az alkarakterláncokról fogok beszélni. Az alkarakterlánc egy karakterlánc része. A karakterláncokon végzett leggyakoribb művelet (több karakterlánc összevonása után) egy részkarakterlánc beszerzése."

7) Hogyan kaphatok részt egy karakterláncban?

"A részkarakterlánc metódus egy String egy részét adja vissza. Ennek a metódusnak két változata van."

"Az első verzió a kezdő és záró indexek által meghatározott részkarakterláncot adja vissza. De a záró indexben lévő karaktert nem tartalmazza! Ha átadja az 1-es és 3-as számokat, akkor az alsztring csak a második és a harmadik karaktert fogja tartalmazni (emlékezzen az indexek kezdetére 0-val).

"A második verzió az átadott indextől kezdve a karakterlánc végéig adja vissza a részkarakterláncot."

Mód) Példák
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Eredmény:

s == "ood n";
String substring(int beginIndex)
String s = "Good news, everyone!";
s = s.substring(1);

– Ez elég egyszerű. Köszönöm, Ellie.

– A String objektumok belső működését is el fogom magyarázni neked.

"Amint azt valószínűleg már tudod, a String egy megváltoztathatatlan osztály. És milyen előnyöket ad ez nekünk? Amint megtörténik, az egyik legfontosabb előny az, hogy egy részkarakterláncot kaphatunk. De először is."

"Belsőleg egy String objektum egy karaktertömböt tartalmaz, amit nem olyan nehéz kitalálni. De két további változót is tárol: a tömb első karakterének indexét és a karakterek számát. Most elmondom, hogy mik ezek használják."

"Amikor létrehozunk egy részkarakterláncot a substring metódussal, egy új String objektum jön létre."

"De ahelyett, hogy egy új karaktertömbre való hivatkozást tárolna, az objektum a régi tömbre való hivatkozást, valamint két változót tárol, amelyek segítségével meghatározza az eredeti karaktertömb hozzá társított részét."

– Ebből semmit nem értettem.

"A részstring létrehozásakor a karaktertömb nem kerül átmásolásra az új String objektumba. Ehelyett mindkét objektum az eredeti karaktertömbre való hivatkozást tárolja. De! A második objektum két változót is tárol: a kezdő indexét a tömbben és a az alkarakterlánchoz tartozó karakterek száma."

"Nézd meg:"

Egy részkarakterlánc beszerzése Mi van az alkarakterláncban tárolva
String s = "mama";
Amit az s tárol:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
Mi van az s2-ben tárolva:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
Mi van az s3-ban tárolva:

char[] value = {'m','a','m','a'};
offset = 1;
count = 2;

"Mindhárom karakterlánc ugyanarra a karaktertömbre utal hivatkozást, de tárolja a rájuk tartozó első és utolsó karakter indexét is. Pontosabban az első karakter indexét és a karakterszámot."

– Ennek most van értelme.

"Tehát ha veszel egy 10 000 karakter hosszúságú karakterláncot, és 10 000 tetszőleges hosszúságú részkarakterláncot hozol létre, ezek az alkarakterláncok nagyon kevés memóriát használnak, mivel a karaktertömb nem duplikálódik. szó szerint csak néhány bájtot vesz igénybe."

"Menő!"

– De megtennéd, ha módosítanád a Strings-t?

"Nem, valaki megváltoztathatja az első karakterláncot, és akkor az összes alsztringje is megváltozik. Most már érthető, hogy miért csinálták ezt. Ez egy nagyon klassz megoldás."

"Örülök, hogy tetszett."