문자열 내부 작동 및 하위 문자열 방법 - 1

"안녕, 아미고!"

"안녕, 엘리."

"하위 문자열에 대해 말씀드리겠습니다. 하위 문자열은 문자열의 일부입니다. 그리고 문자열에서 수행되는 가장 일반적인 작업(여러 문자열을 함께 결합한 후)은 하위 문자열을 얻는 것입니다."

7) 문자열의 일부를 어떻게 얻습니까?

"하위 문자열 메서드는 문자열의 일부를 반환합니다. 이 메서드에는 두 가지 버전이 있습니다."

"첫 번째 버전은 시작 인덱스와 끝 인덱스로 지정된 하위 문자열을 반환합니다. 그러나 끝 인덱스의 문자는 포함되지 않습니다! 숫자 1과 3을 전달하면 하위 문자열에는 두 번째와 세 번째 문자만 포함됩니다(인덱스 시작을 기억하십시오. 0으로)."

"두 번째 버전은 전달된 인덱스부터 문자열 끝까지 하위 문자열을 반환합니다."

행동 양식)
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은 변경할 수 없는 클래스입니다. 그리고 그것이 우리에게 주는 이점은 무엇입니까? 공교롭게도 주요 이점 중 하나는 하위 문자열을 가져올 수 있다는 것입니다. 하지만 먼저 해야 할 일이 있습니다."

"내부적으로 String 개체에는 추측하기 어렵지 않은 문자 배열이 포함되어 있습니다. 그러나 배열의 첫 번째 문자 인덱스와 문자 수라는 두 가지 변수도 저장합니다. 이제 이 객체가 무엇인지 알려드리겠습니다. 위해 사용됩니다."

" 하위 문자열 메서드 를 사용하여 하위 문자열을 생성하면 새 String 객체가 생성됩니다."

"그러나 새 문자 배열에 대한 참조를 저장하는 대신 객체는 이전 배열에 대한 참조와 연결된 원래 문자 배열의 일부를 결정하는 데 사용하는 두 개의 변수를 저장합니다."

"나는 그 어떤 것도 이해하지 못했다."

"하위 문자열이 생성될 때 문자 배열은 새 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개의 하위 문자열을 생성하면 문자 배열이 복제되지 않기 때문에 이러한 하위 문자열은 메모리를 거의 사용하지 않습니다. 이 문자열은 많이 사용할 것으로 예상됩니다. 문자 그대로 몇 바이트만 차지합니다."

"시원한!"

"하지만 문자열을 수정할 수 있다면 그렇게 할 수 있습니까?"

"아니요, 누군가가 첫 번째 문자열을 변경하면 모든 하위 문자열도 변경될 수 있습니다. 이제 왜 그렇게 했는지 이해가 됩니다. 정말 멋진 솔루션입니다."

"마음에 드셨다니 다행입니다."