Java에서 String, StringBuffer, StringBuilder의 차이점 소개
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보다 효율이 높습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.