Java에서 String, StringBuffer, StringBuilder의 차이점 소개

자바에서 String, String Buffer, String Builder는 프로그래밍에서 자주 사용하는 문자열 클래스로 이들의 차이점도 면접에서 자주 묻는 질문이다.지금 총결하여 그들의 차이와 동일함을 보아라.
1. 가변 및 가변
String 클래스에서 문자열 그룹을 사용하여 문자열을 저장합니다. 다음과 같습니다. "final"수식자가 있기 때문에string 대상이 변할 수 없다는 것을 알 수 있습니다.
    private final char value[];
StringBuilder와 StringBuffer는 모두 AbstractStringBuilder 클래스에서 계승되고 AbstractStringBuilder에서도 문자열 그룹을 사용하여 문자열을 저장합니다. 다음과 같이 두 대상이 모두 가변적임을 알 수 있습니다.
    char[] value;
2. 다중 스레드 안전 여부
String의 대상은 변할 수 없고 상량으로 이해할 수 있으며 분명히 라인이 안전합니다.
AbstractStringBuilder는 StringBuilder와 StringBuffer의 공공 부류로 expandCapacity, append, insert, indexOf 등 일부 문자열의 기본 동작을 정의했다.
StringBuffer는 방법에 동기화 자물쇠를 추가하거나 호출하는 방법에 동기화 자물쇠를 추가하기 때문에 라인이 안전합니다.다음 소스 코드를 참조하십시오.

public synchronized StringBuffer reverse() {
    super.reverse();
    return this;
}

public int indexOf(String str) {
    return indexOf(str, 0);        // public synchronized int indexOf(String str, int fromIndex)
}

StringBuilder는 메서드에 동기식 잠금을 추가하지 않으므로 비스레드가 안전합니다.
3. StringBuilder와 StringBuffer의 공통점
StringBuilder와 StringBuffer는 공통 상위 AbstractStringBuilder(추상 클래스)가 있습니다.
추상류와 인터페이스의 차이점은 추상류에서 일부 자류의 공공 방법을 정의할 수 있고 자류는 새로운 기능만 추가하고 이미 존재하는 방법을 중복적으로 쓸 필요가 없다는 것이다.인터페이스는 방법에 대한 설명과 상량의 정의일 뿐이다.
StringBuilder, StringBuffer의 방법은 모두 AbstractStringBuilder의 공공 방법, 예를 들어 슈퍼를 호출합니다.append(...).다만 StringBuffer는 방법에 synchronized 키워드를 추가하여 동기화합니다.
마지막으로 프로그램이 다중 루틴이 아니라면 StringBuilder를 사용하면 StringBuffer보다 효율이 높습니다.

좋은 웹페이지 즐겨찾기