문자열의 값은 불변의 문자열이 불변으로 새로운 문자열 객체를 생성합니다. 이는 비효율적 일뿐 만 아니라 많은 메모리 공간을 소비합니다.
StringBuffer 클래스는 문자열 클래스와 동일하며 문자열의 내부 구현은 문자열 처리가 수행되면 새 개체가 생성되지 않으며 String보다 낫습니다. 메모리 사용.
StringBuffer는이 크기를 초과하면 16 바이트 길이의 버퍼를 기본적으로 할당합니다.
StringBuffer는 문자열과 같지 않습니다.
StringBuffer str1 = new StringBuffer (); 16 바이트의 길이는 StringBuffer str3 = new StringBuffer (www.weixueyuan.net) 뒤에 예약되어 있습니다.
StringBuffer 클래스의 주요 방법
StringBuffer 클래스의 메소드는 주로 추가, 삽입 및 삭제와 같은 문자열의 작동에 중점을 두며 StringBuffer 클래스와 문자열 클래스의 주요 차이입니다. 실제 개발에서 문자열을 자주 수정 해야하는 경우 StringBuffer를 사용하는 것이 좋습니다.
1) 부록 () 메소드
부록 () 메소드는 문자열 연결과 유사한 현재 문자열 끝에 컨텐츠를 추가하는 데 사용됩니다. 이 메소드를 호출 한 후 StringBuffer 객체의 내용도 다음과 같습니다.
StringBuffer str = new StringBuffer ( "biancheng100"); str.append (true);
그러면 Object Str의 값은 "Biancheng100true"가됩니다. STR이 지적한 내용은 STR의 포인팅이 변경되지 않았지만 변경되었습니다.
문자열의 "+"작동은 실제로 StringBuffer 객체를 먼저 생성 한 다음 append () 메소드를 호출하여 문자열 조각을 스플릿 한 다음 마지막으로 toString () 메소드를 호출하여 문자열로 변환합니다.
이러한 방식으로 문자열의 연결 작업은 StringBuffer보다 더 많은 추가 작업을 수행하며 효율성이 필연적으로 줄어 듭니다.
그러나 작은 문자열의 경우 "+"작업은 더 직관적이고 읽기 쉬우 며 때로는 효율성을 약간 희생 할 수 있습니다.
2) deletecharat ()
deletecharat () 메소드는 지정된 위치에서 문자를 삭제하고 나머지 문자의 새로운 문자열을 형성하는 데 사용됩니다. 예를 들어:
StringBuffer str = new StringBuffer ( "abcdef"); str.
이 코드는 인덱스 값 3, 즉 "D"문자로 문자를 삭제합니다.
예를 들어 Delete () 메소드를 통해 여러 문자를 한 번에 삭제할 수도 있습니다.
StringBuffer str = new StringBuffer ( "abcdef"); str.delete (1, 4);
이 코드는 인덱스 값 1을 포함하여 1과 4 사이의 인덱스 값을 가진 문자를 삭제합니다.
3) insert () 메소드
insert ()는 지정된 위치에 문자열을 삽입하는 데 사용되며 업그레이드 된 버전의 append ()로 간주 될 수 있습니다. 예를 들어:
StringBuffer str = new StringBuffer ( "abcdef"); str.insert (3, "xyz");
Str가 지적한 문자열은 Abcdxyzef입니다.
4) setcharat () 메소드
setcharat () 메소드는 지정된 위치에서 문자를 수정하는 데 사용됩니다. 예를 들어:
StringBuffer str = new StringBuffer ( "abcdef"); str.setcharat (3, 'z');
이 코드는 인덱스 값이 3에서 z의 문자를 수정하고 Str가 가리키는 문자열은 ABCZEF입니다.
위는 일반적으로 사용되는 일부 방법과 설명에 대한 간단한 설명입니다. API 문서를 참조하십시오.
문자열과 StringBuffer의 효율성 비교
실행 효율성을 더 명확하게 보려면 다음 코드는 26 개의 영어 문자를 10,000 번 추가합니다.
공개 클래스 {public static void main (string [] args) {int times = 10000을 통과합니다 (int i = 0; i <times; i ++) {str1 += fragment} system.currenttimeMillis (); // StringBuffer Long TimestArt2 = CurrentTimeMillis (); (); System.out.println (StringBuffer : " + (TimeEnd2 -TimestArt2)}; 실행 결과 :
문자열 : 5287msstringBuffer : 3ms
결론은 분명합니다. StringBuffer의 실행 효율은 문자열보다 수천 배 빠릅니다.
문자열 : 35923MSStringBuffer : 8ms
따라서 많은 문자열 작업이 포함될 때 StringBuffer를 사용하는 것이 좋습니다.
StringBuilder 클래스
StringBuilder 클래스 및 StringBuffer 클래스의 함수는 기본적으로 유사하며, 주요 차이점은 StringBuilder가 비교할 때 다중 스레드-안전이라는 것입니다 약간 더 빠릅니다.
charEdegence 인터페이스는 StringBuffer, StringBuilder 및 String에서 구현됩니다.
charSequence는 문자열 작업을 정의하는 인터페이스입니다. length (), charat (int index), 후속 (int start, int end) 만 포함됩니다.
StringBuffer, StringBuilder 및 String의 charEdegence 인터페이스의 구현 프로세스는 다음과 같습니다.
문자열은 charEdegeBuilder와 StringBufer가 가변적 인 문자 시퀀스를 직접 구현하고 charEdeceence 인터페이스를 구현한다는 것을 알 수 있습니다.
요약
실 안전 :
StringBuffer : 스레드-안전
StringBuilder : 스레드는 안전하지 않습니다
속도:
일반적으로, 빠른 속도에서 느리게 속도는 StringBuilder> StringBuffer> 문자열입니다. 물론 이것은 절대적인 것이 아니라 상대적입니다.
사용 환경 :
문자열을 사용하여 소량의 데이터를 작동하십시오.
StringBuilder를 사용하여 단일 스레드에서 다량의 데이터를 작동하십시오.
다량의 데이터의 다중 스레딩 작업은 StringBuffer를 사용합니다.