Działanie wewnętrzne strun i metoda podłańcuchowa - 1

"Cześć, Amigo!"

– Cześć, Elli.

„Opowiem ci o podłańcuchach. Podłańcuch jest częścią łańcucha. A najczęstszą operacją wykonywaną na łańcuchach (po połączeniu kilku ciągów razem) jest uzyskanie podłańcucha”.

7) Jak uzyskać część ciągu?

„Metoda substring zwraca część ciągu znaków. Ta metoda ma dwie wersje.”

"Pierwsza wersja zwraca podłańcuch określony przez indeksy początkowe i końcowe. Ale znak w indeksie końcowym nie jest uwzględniony! Jeśli przekażesz cyfry 1 i 3, to podłańcuch będzie zawierał tylko drugi i trzeci znak (pamiętaj, że indeksy start z 0).”

„Druga wersja zwraca podłańcuch, zaczynając od przekazanego indeksu do końca ciągu”.

Metoda(y) Przykład(y)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Wynik:

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

„To dość proste. Dzięki, Ellie”.

„Zamierzam również wyjaśnić ci wewnętrzne działanie obiektów String”.

„Jak zapewne już wiesz, String jest klasą niezmienną. I jakie to daje nam korzyści? Tak się składa, że ​​jedną z kluczowych zalet jest możliwość uzyskania podłańcucha. Ale najpierw najważniejsze”.

„Wewnętrznie obiekt String zawiera tablicę znaków, co nie jest trudne do odgadnięcia. Ale przechowuje również dwie dodatkowe zmienne: indeks pierwszego znaku w tablicy i liczbę znaków. Teraz powiem ci, co to jest służą."

„Kiedy tworzymy podciąg przy użyciu metody substring , tworzony jest nowy obiekt typu String ”.

„Ale zamiast przechowywać odniesienie do nowej tablicy znaków, obiekt przechowuje odniesienie do starej tablicy, a także dwie zmienne, których używa do określenia części oryginalnej tablicy znaków, która jest z nim powiązana”.

– Nic z tego nie zrozumiałem.

„Kiedy tworzony jest podłańcuch, tablica znaków nie jest kopiowana do nowego obiektu String. Zamiast tego oba obiekty przechowują odniesienie do oryginalnej tablicy znaków. Ale! Drugi obiekt przechowuje również dwie zmienne: jego początkowy indeks w tablicy i liczba znaków należących do podłańcucha."

"Sprawdź to:"

Pobieranie podciągu Co jest przechowywane w podciągu
String s = "mama";
Co jest przechowywane w s:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
Co jest przechowywane w s2:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
Co jest przechowywane w s3:

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

„Wszystkie trzy łańcuchy przechowują odniesienie do tej samej tablicy znaków, ale przechowują również indeks pierwszego i ostatniego znaku, który ich dotyczy. A dokładniej indeks pierwszego znaku i liczbę znaków”.

– To ma teraz sens.

„Tak więc, jeśli weźmiesz łańcuch o długości 10 000 znaków i utworzysz 10 000 podciągów o dowolnej długości, te podciągi będą zużywać bardzo mało pamięci, ponieważ tablica znaków nie jest duplikowana. miejsca zajmie dosłownie tylko kilka bajtów”.

"Fajny!"

„Ale czy mógłbyś to zrobić, gdybyś mógł modyfikować Stringi?”

„Nie, ktoś mógłby zmienić pierwszy ciąg, a następnie wszystkie jego podciągi również by się zmieniły. Teraz ma sens, dlaczego to zrobił. To naprawdę fajne rozwiązanie”.

"Cieszę się, że to lubisz."