Hoạt động bên trong của chuỗi và phương thức chuỗi con - 1

"Chào, Amigo!"

"Chào, Ellie."

"Tôi sẽ nói với bạn về chuỗi con. Chuỗi con là một phần của chuỗi. Và thao tác phổ biến nhất được thực hiện trên các chuỗi (sau khi kết hợp nhiều chuỗi với nhau) là thu được một chuỗi con."

7) Làm cách nào để tôi có được một phần của Chuỗi?

"Phương thức chuỗi con trả về một phần của Chuỗi. Phương thức này có hai phiên bản."

"Phiên bản đầu tiên trả về chuỗi con được chỉ định bởi các chỉ số bắt đầu và kết thúc. Nhưng ký tự ở chỉ mục kết thúc không được bao gồm! Nếu bạn chuyển các số 1 và 3, thì chuỗi con sẽ chỉ chứa các ký tự thứ hai và thứ ba (hãy nhớ các chỉ số bắt đầu bằng 0)."

"Phiên bản thứ hai trả về chuỗi con bắt đầu từ chỉ mục đã truyền cho đến khi kết thúc Chuỗi."

(các) phương pháp (các) ví dụ
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Kết quả:

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

"Đơn giản thế thôi. Cảm ơn, Ellie."

"Tôi cũng sẽ giải thích hoạt động bên trong của các đối tượng Chuỗi cho bạn."

"Như bạn có thể đã biết, Chuỗi là một lớp bất biến. Và điều đó mang lại cho chúng ta những lợi thế gì? Khi nó xảy ra, một trong những lợi thế chính là khả năng nhận được một chuỗi con. Nhưng điều đầu tiên là trước tiên."

"Bên trong, một đối tượng Chuỗi chứa một mảng các ký tự, điều này không khó đoán. Nhưng nó cũng lưu trữ thêm hai biến nữa: chỉ mục của ký tự đầu tiên trong mảng và số ký tự. Bây giờ tôi sẽ cho bạn biết những thứ này là gì được sử dụng cho."

"Khi chúng ta tạo một chuỗi con bằng phương thức chuỗi con , một đối tượng Chuỗi mới được tạo."

"Tuy nhiên, thay vì lưu trữ một tham chiếu đến một mảng ký tự mới, đối tượng lưu trữ một tham chiếu đến mảng cũ cũng như hai biến mà nó sử dụng để xác định phần của mảng ký tự ban đầu được liên kết với nó."

"Tôi không hiểu bất cứ điều gì trong số đó."

"Khi một chuỗi con được tạo, mảng ký tự không được sao chép sang đối tượng Chuỗi mới. Thay vào đó, cả hai đối tượng lưu trữ một tham chiếu đến mảng ký tự ban đầu. Nhưng! Đối tượng thứ hai cũng lưu trữ hai biến: chỉ số bắt đầu của nó trong mảng và số ký tự thuộc về chuỗi con."

"Kiểm tra xem:"

Lấy một chuỗi con Những gì được lưu trữ bên trong chuỗi con
String s = "mama";
Những gì được lưu trữ trong s:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
Những gì được lưu trữ trong s2:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
Những gì được lưu trữ trong s3:

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

"Cả ba Chuỗi đều lưu trữ tham chiếu đến cùng một mảng ký tự, nhưng chúng cũng lưu trữ chỉ mục của ký tự đầu tiên và ký tự cuối cùng liên quan đến chúng. Hay chính xác hơn là chỉ mục của ký tự đầu tiên và số lượng ký tự."

"Điều đó có ý nghĩa bây giờ."

"Vì vậy, nếu bạn lấy một Chuỗi dài 10.000 ký tự và bạn tạo 10.000 chuỗi con có độ dài bất kỳ, thì những chuỗi con này sẽ sử dụng rất ít bộ nhớ vì mảng ký tự không bị trùng lặp. Những Chuỗi này, mà bạn cho rằng sẽ sử dụng rất nhiều không gian, theo nghĩa đen sẽ chỉ mất một vài byte."

"Mát mẻ!"

"Nhưng bạn có thể làm điều đó nếu bạn có thể sửa đổi Chuỗi không?"

"Không, ai đó có thể thay đổi Chuỗi đầu tiên, và sau đó tất cả các chuỗi con của nó cũng sẽ thay đổi. Bây giờ thì đã hiểu tại sao họ lại làm như vậy. Đó là một giải pháp thực sự tuyệt vời."

"Tôi vui vì bạn thích nó."