C#의string 유형 이해
3021 단어 String 클래스
string a = "aaa";
string b = a;
b = "bbb";
또는 다음과 같은 코드 행:
public void Swap(string s1, string s2)
{
string temp=s1;
s1=s2;
s2=temp;
}
이때 결과가 인쇄되자 a의 값이 변하지 않았고 Swap도 성공하지 못했다. 이때 환각이 생겼다. 인용이 없는 거 아니야?허허, C#의 스트링이 성명한 것은class String이다. 당연히 인용을 전달하는 것이다. 이렇게 거칠게'성명을class라고 하는 것은 인용을 전달하는 것이다'는 규칙을 어지럽히지 않을 것이다.
분석:
string a = "aaa";//==> a----->new String("aaa")
string b = a;//==>b----->a, 인용
b = "bbb";//==> b--->new String("bbb"), 인용, b는 새로운 문자열을 가리키고 a는 변하지 않습니다.
Swap 함수도 마찬가지다. 예를 들어 a를 패스하면 b가 들어간다(a="aaa", b="bbb"),//s1---->a, s2---->b
string temp=s1;//temp----->s1----->a
s1=s2; //s1----->s2----->b;
s2=temp;//s2---->temp---->a 결과, s1과 s2는 확실히 스맵이지만, 이런 결과는 a와 b에 영향을 주지 않는다.
또 아래의 이 예와 같다.
- class Class1
- {
- static void StrChange(string str)
- {
- str = "hellow";
- }
-
- static void Main()
- {
- string str = "123";//
- StrChange(str);//
- Console.WriteLine(str);//
- }
- }
출력 결과는 "123"입니다.
그러면string은 도대체 값 형식입니까, 아니면 인용 형식입니까?어떤 사람들은 값 유형이라면 결과는 오히려 지나쳤다고 말할 것이다.그러나string의 정의는 인용 유형이어야 하지 않습니까?인용 유형이라면.출력의 결과 난이도는 "hellow"이어야 하지 않습니까?
이 질문에 대한 해답은 C# string 유형이 특별한 참조 유형이고 인스턴스가 읽기 전용이라는 점에서 중요합니다.이곳은 문법과 실현의 차이를 분명히 해야 한다.C# 구문에서
◆ static void StrChange(string str)는 값 전달
◆ static void StrChange(ref string str)는 참조 전달
그러나 실현에 있어 static void StrChange(string str)라는 값은 함수 체내에서str를 수정하기 전에 함수 외부의 변수와 같은 메모리를 가리키며'인용'전달이지만 함수 체내에서str를 수정하면 이str에 다시 한 블록의 메모리를 분배하는 것을 촉발한다.
따라서 String은 참조 유형이지만 변경될 수 없습니다.문자열에 대해 대소문자 변환, +=와 같은 조작을 하면 사실상 문자열을 다시 만들 수 있습니다.이것 또한 대량의 문자열 연결을 할 때 + = 을 사용하지 않고 StringBuilder를 사용해야 하는 이유이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#의string 유형 이해C# String 유형이 값 유형인지 참조 유형인지 여부에 대해 많은 C# 학습자들 사이에서 곤혹스러웠습니다. string a = "aaa"; string b = a; b = "bbb"; public void Swa...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.