C\#의 String 과 StringBuilder 상세 설명

6546 단어 C#StringStringBuilder
1.String 은 언제 사용 하나 요?StringBuilder 는 언제 사용 합 니까?
문자열 을 만 들 면 크기 를 수정 할 수 없습니다.System.string 클래스 의 방법 을 사용 할 때마다 메모리 에 새 문자열 대상 을 만 듭 니 다.새 대상 에 게 새로운 공간 을 할당 해 야 합 니 다.문자열 에 대한 중복 수정 이 필요 한 경우 새로운 String 대상 을 만 드 는 것 과 관련 된 시스템 비용 이 매우 비 쌀 수 있 습 니 다.새 대상 을 만 들 지 않 고 문자열 을 수정 하려 면 System.Text.String Builder 류 를 사용 할 수 있 습 니 다.예 를 들 어 하나의 순환 에서 많은 문자열 을 연결 할 때 StringBuilder 클래스 를 사용 하면 성능 을 향상 시 킬 수 있 습 니 다.
따라서 문자열 을 추가 하거나 삭제 하 는 작업 이 잦 지 않 으 면 몇 개의 고정된 string 을 누적 할 때 StringBuilder 가 필요 하지 않 습 니 다.StringBuilder 의 초기 화 에 도 시간 이 필요 하기 때 문 입 니 다.문자열 을 추가 하거나 삭제 하 는 작업 이 잦 으 면 StringBuilder 를 사용 하 세 요.

String a1 = "abc";  //         
a1+="def";  //        a1,      

StringBuilder sb = new StringBuilder(20);  //      
sb.Append('abc');  //     
sb.Append('def');  //     ,         。
요약:위의 a1 과 sb 는 출력 결과 가 같 습 니 다.하지만 메모리 분배 에 있어 서 는 차이 가 크다.
2.String 과 StringBuilder 의 차이
String 선언 이후 메모리 의 크기 는 변경 할 수 없습니다.StringBuilder 는 자 유 롭 게 크기 를 확장 할 수 있 습 니 다.(String 은 스 택 에 할당 되 고 StringBuilder 는 스 택 에 분 배 됩 니 다)
1)String( C\#string 문자열 상세 설명 )

String s1 = new String(new char[] { 'c', 'h', 'i', 'n', 'a' });
String s2 = "abc";
2)StringBuilder

StringBuilder sb = new StringBuilder(5); //         ,        。       ,             。                 ,  10,15,20。      
sb.Append('china');
sb.Capacity = 25; //  ,     / Capacity            。

//EnsureCapacity         StringBuilder   。          ,        ;  ,          ,                   。   
//        Length  。   Length       Capacity    ,    Capacity      Length      。   Length         StringBuilder           ,        。   

//5   StringBuilder      
StringBuilder.Append         //        StringBuilder   。     
StringBuilder.AppendFormat   //                    。     
StringBuilder.Insert         //            StringBuilder        。     
StringBuilder.Remove         //   StringBuilder            。     
StringBuilder.Replace        //            。

//Append   
//Append                         StringBuilder            。
//       StringBuilder      “Hello   World”,                 。           。 
StringBuilder sb = new StringBuilder("Hello World!");  
sb.Append(" What a beautiful day.");  
Console.WriteLine(sb); //  :Hello World! What a beautiful day. 

//AppendFormat   
//AppendFormat        StringBuilder    ,     IFormattable  ,                     。                        StringBuilder   。
//      AppendFormat                    StringBuilder   。  
int MyInt = 25;    
StringBuilder sb = new StringBuilder("Your total is ");  
sb.AppendFormat("{0:C}   ",   MyInt);  
Console.WriteLine(sb); //  :Your total is $25.00   

//Insert   
//Insert              StringBuilder      。
//                 StringBuilder      。
StringBuilder sb = new StringBuilder("Hello World!");  
sb.Insert(6,"Beautiful ");  
Console.WriteLine(sb); //  :Hello Beautiful World!  

//Remove   
//Remove     StringBuilder          ,                  。
//      Remove    StringBuilder。   
StringBuilder sb = new StringBuilder("Hello World!");  
sb.Remove(5,7);  
Console.WriteLine(sb); //  :Hello

//Replace   
//  Replace  ,              StringBuilder      。
//      Replace     StringBuilder  ,          (!),      (?)     。
StringBuilder sb = new StringBuilder("Hello World!");  
sb.Replace('!',   '?');  
Console.WriteLine(sb); //  :Hello World?
메모리 에서 어떻게 분배 하 는 지 보 겠 습 니 다.다음 그림 입 니 다.
在这里插入图片描述
3)그것들 이 어떻게 분배 되 는 지 알 면'=','Equals','Object.Reference Equals(obj 1,obj 2)'를 잘 구분 할 수 있다.
(1)여기==전에 먼저 말씀 드 리 겠 습 니 다.자바 프로그래머 가 이곳 을 볼 때 약간 어 리 석 을 수도 있 습 니 다.자바 에 서 는 String 형식 이 쌓 여 있 습 니 다.C\#는 다르다.마이크로소프트 는 String 유형 을 최적화 시킨다.
(2)마이크로소프트 는 문자열 을 처리 할 때 산 목록 을 사용 합 니 다.그것 은 무엇 입 니까?간단 한 이 해 는 문자열'china'라 는 문자열 을 만 들 었 을 때 이 문자열 을 다시 만 들 때 컴 파일 러 는 더 이상 새로운 메모 리 를 열 어 저장 하지 않 는 다 는 것 이다.처음 만 든 주 소 를 직접 가리 킬 것 입 니 다.
(3)다음 코드 를 보십시오.

string s1 = "china";
string s2 = "china";
 
String s3 = new String(new char[] { 'c', 'h', 'i', 'n', 'a' });
String s4 = new String(new char[] { 'c', 'h', 'i', 'n', 'a' });
 
Console.WriteLine(s1 == s2);    //True 
Console.WriteLine(s1.Equals(s2));   //True
Console.WriteLine(Object.ReferenceEquals(s1, s2));  //True
Console.WriteLine("--------------------------");
 
Console.WriteLine(s3 == s4);    //True          ,String s1 = new String(new char[] { 'c', 'h', 'i', 'n', 'a' });   string s1 = "china";    s1 == s3  True 。
Console.WriteLine(s3.Equals(s4));   //True
Console.WriteLine(Object.ReferenceEquals(s3, s4));  //False
Console.WriteLine("--------------------------");
 
Console.WriteLine(s1 == s3);    //True
Console.WriteLine(s1.Equals(s3));   //True
Console.WriteLine(Object.ReferenceEquals(s1, s3));  //False
Console.WriteLine("---------StringBuilder-----------------");
 
StringBuilder sb1 = new StringBuilder("china");
StringBuilder sb2 = new StringBuilder("china");
Console.WriteLine(sb1 == sb2);      //False
Console.WriteLine(sb1.Equals(sb2)); //True
Console.WriteLine(Object.ReferenceEquals(sb1, sb2));    //False
더미 와 창고 분석 도:
在这里插入图片描述
총결산
1)==이것 은 비교 한 창고 안의 값 이 같 습 니까?(값 비교)
2)Equals 는 쌓 여 있 는 값 이 같은 지 비교 합 니 다.(주소 값 비교 참조)
3)Object.Reference Equals(object 1,object 2)는 메모리 주소 가 같은 지 비교 합 니 다.
C\#의 String 과 StringBuilder 에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 관련 C\#String 과 StringBuiler 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기