Вътрешна работа на низовете и методът на поднизовете - 1

„Здрасти, Амиго!“

— Здравей, Ели.

„Ще ви разкажа за поднизовете. Поднизът е част от низ. И най-честата операция, извършвана върху низове (след комбиниране на няколко низа заедно) е получаването на подниз.“

7) Как да получа част от низ?

"Методът substring връща част от String. Този метод има две версии."

"Първата version връща подниза, зададен чрез начален и краен индекс. Но знакът в крайния индекс не е включен! Ако подадете числата 1 и 3, тогава поднизът ще съдържа само втория и третия знак (не забравяйте, че индексите започват с 0)."

„Втората version връща подниза, започвайки от подаден индекс до края на низа.“

Метод(и) Примери)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Резултат:

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

— Това е достатъчно просто. Благодаря, Ели.

„Също така ще ви обясня вътрешната работа на String обектите.“

„Както вероятно вече знаете, String е неизменен клас. И Howви предимства ни дава това? Както се случва, едно от ключовите предимства е възможността да получите подниз.

„Вътрешно String обектът съдържа масив от знаци, което не е толкова трудно за отгатване. Но той също така съхранява още две променливи: индекса на първия знак в масива и броя на знаците. Сега ще ви кажа Howво представляват тези се използват за."

„Когато създаваме подниз, използвайки метода подниз , се създава нов обект String .“

„Но instead of да съхранява препратка към нов масив от знаци, обектът съхранява препратка към стария масив, Howто и две променливи, които използва, за да определи частта от оригиналния масив от знаци, която е свързана с него.“

— Нищо от това не разбрах.

"Когато се създава подниз, масивът от знаци не се копира в новия обект String. Вместо това и двата обекта съхраняват препратка към оригиналния масив от знаци. Но! Вторият обект също съхранява две променливи: неговия начален индекс в масива и брой знаци, които принадлежат на подниза."

"Виж това:"

Получаване на подниз Какво се съхранява вътре в подниза
String s = "mama";
Какво се съхранява в s:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
Какво се съхранява в s2:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
Какво се съхранява в s3:

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

„И трите низа съхраняват препратка към един и същ масив от символи, но също така съхраняват индекса на първия и последния знак, които се отнасят за тях. Или по-точно, индекса на първия знак и броя на символите.“

— Това вече има смисъл.

„Така че, ако вземете низ с дължина 10 000 знака и създадете 10 000 подниза с произволна дължина, тези поднизове ще използват много малко памет, тъй като масивът от знаци не се дублира. Тези низове, които бихте очаквали да изразходват много пространство, ще отнеме буквално само няколко byteа."

"Готино!"

„Но бихте ли могли да направите това, ако можете да модифицирате низове?“

„Не, някой може да промени първия низ и тогава всички негови поднизове също ще се променят. Сега има смисъл защо са направor това. Това е наистина страхотно решение.“

"Радвам се, че ти харесва."