java(5):String,StringBuffer,StringBuilder 구별

2998 단어 자바 학습 노트
String:    String 의 값 은 가 변 적 이지 않 기 때문에 매번 String 의 값 을 바 꾸 는 것 은 사실 새로운 대상 을 만 드 는 것 이기 때문에 메모리 비용 이 커 집 니 다.
StringBuffer:    가 변 적 인 문자열 변수 이 며 스 레 드 가 안전 합 니 다.
StringBuilder:    가 변 적 인 문자열 변수 이 며 스 레 드 가 안전 하지 않 습 니 다.
다음 내용 원문:https://blog.csdn.net/rmn190/article/details/1492013
    요컨대 String 타 입 과 StringBuffer 타 입의 주요 성능 차 이 는 String 이 가 변 적 이지 않 은 대상 이기 때문에 String 타 입 을 변경 할 때마다 새로운 String 타 입 을 생 성 한 다음 에 새로운 String 타 입 을 가리 키 는 것 과 같 습 니 다.따라서 내용 을 자주 바 꾸 는 문자열 은 String 을 사용 하지 않 는 것 이 좋 습 니 다.매번 생 성 대상 이 시스템 성능 에 영향 을 미 치기 때문에 특히 메모리 에 인용 대상 이 많 지 않 으 면 JVM 의 GC 가 작 동 하기 시작 하 는데 그 속 도 는 상당히 느 릴 것 이다.StringBuffer 클래스 를 사용 하면 결과 가 달라 집 니 다.결과 마다 StringBuffer 대상 자 체 를 조작 합 니 다.새로운 대상 을 만 드 는 것 이 아니 라 대상 인용 을 변경 합 니 다.그래서 일반적인 상황 에서 저 희 는 StringBuffer 를 사용 하 는 것 을 추천 합 니 다.특히 문자열 대상 이 자주 바 뀌 는 상황 에서.특정한 상황 에서 String 대상 의 문자열 조합 은 JVM 에 의 해 StringBuffer 대상 의 조합 으로 해석 되 었 기 때문에 이 럴 때 String 대상 의 속 도 는 StringBuffer 대상 보다 느 리 지 않 습 니 다.특히 다음 문자열 대상 생 성 에서 String 효율 은 StringBuffer 보다 훨씬 빠 릅 니 다.
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

String S1 대상 을 만 드 는 속도 가 너무 빠 른 데 이 럴 때 String Buffer 는 속도 가 전혀 우세 하지 않다 는 것 을 놀 라 게 될 것 이다.사실 이것 은 JVM 의 수작 입 니 다.JVM 의 눈 에는 이것 입 니 다.
String S1 = “This is only a” + “ simple” + “test”;

 사실은:
String S1 = “This is only a simple test”;

그 러 니까 시간 많이 필요 없 지.하지만 여기 서 주의해 야 할 것 은 문자열 이 다른 String 대상 에서 왔 다 면 속도 가 그리 빠 르 지 않 을 것 입 니 다.예 를 들 면:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;

이때 JVM 은 규칙 적 으로 원래 의 방식 대로 할 것 이다.
대부분의 경우 StringBuffer>String    StringBuffer:(java.lang.StringBuffer)라인 이 안전 한 가 변 문자 시퀀스 입 니 다.String 과 유사 한 문자열 버퍼 입 니 다.변경 할 수 없습니다.임의의 시간 대 에 특정한 문자 배열 을 포함 하고 있 지만 어떤 방법 으로 호출 하면 이 배열 의 길이 와 내용 을 바 꿀 수 있 습 니 다.여러 스 레 드 에 문자열 버퍼 를 안전하게 사용 할 수 있 습 니 다.필요 할 때 이 방법 들 을 동기 화 할 수 있 기 때문에 임의의 인 스 턴 스 의 모든 조작 은 직렬 순서 로 발생 하 는 것 같 습 니 다.이 순 서 는 관련 된 모든 스 레 드 에서 진행 하 는 방법 호출 순서 와 일치 합 니 다.
    StringBuffer 의 주요 동작 은 append 와 insert 방법 입 니 다.이 방법 들 을 다시 불 러 와 서 임의의 형식의 데 이 터 를 받 아들 일 수 있 습 니 다.모든 방법 은 주어진 데 이 터 를 문자열 로 효과적으로 변환 한 다음 문자열 버퍼 에 추가 하거나 삽입 할 수 있 습 니 다.append 방법 은 항상 이 문 자 를 버퍼 의 끝 에 추가 합 니 다.insert 방법 은 지정 한 점 에 문 자 를 추가 합 니 다.예 를 들 어 z 가 현재 내용 이'start'인 문자열 버퍼 대상 을 인용 하면 이 방법 은 z.append('le')를 호출 하면 문자열 버퍼 에'startle'을 포함 하고 z.insert(4,'le')는 문자열 버퍼 를 변경 하여'starlet'을 포함 하도록 합 니 다.
대부분의 경우 StringBuilder>StringBuffer    StringBuilder:(java.lang.StringBuilder)라인 이 안전 하지 않 은 가 변 문자 시퀀스 입 니 다.JDK 5.0 이 새로 추 가 했 습 니 다.StringBuffer 와 호 환 되 는 API 를 제공 하지만 동기 화 는 보장 되 지 않 습 니 다.이 종 류 는 StringBuffer 의 간단 한 교체 로 설계 되 었 습 니 다.문자열 버퍼 가 하나의 스 레 드 에 사 용 될 때 사용 합 니 다.가능 하 다 면 이 종 류 를 우선 사용 하 는 것 을 권장 합 니 다.대부분의 실현 에서 StringBuffer 보다 빠 르 기 때 문 입 니 다.양자 의 방법 은 기본적으로 같다.

좋은 웹페이지 즐겨찾기