Java에서 String, StringBuffer 및 StringBuilder는 종종 프로그래밍에 문자열 클래스를 사용합니다. 그들 사이의 차이점은 또한 인터뷰에서 종종 묻는 질문입니다. 이제 요약하고 어떻게 다른지, 동일합니다.
1. 가변적이고 불변
문자열 클래스는 문자 배열을 사용하여 다음과 같이 문자열을 저장합니다. "최종"수정자가 있으므로 문자열 객체가 불변이라는 것을 알 수 있습니다.
개인 최종 문자 가치 [];
StringBuilder와 StringBuffer는 모두 AbstractStringBuilder 클래스에서 상속됩니다. AbstractStringBuilder에서 문자 배열은 문자열을 저장하는 데 사용됩니다. 다음과 같이, 두 객체가 모두 변한다는 것을 알 수 있습니다.
char [] 값;
2. 멀티 스레드와 안전입니까?
문자열의 객체는 불변이기 때문에 상수로 이해 될 수 있으며, 이는 분명히 실 세상입니다.
AbstractStringBuilder는 StringBuilder 및 StringBuffer의 공개 상위 클래스로, 확장 캡시 틱, 추가, 인서트, 인덱스 및 기타 공개 방법과 같은 문자열의 일부 기본 작업을 정의합니다.
StringBuffer는 메소드에 동기화 잠금을 추가했거나 동기화 잠금을 호출 메소드에 추가하므로 스레드 안전입니다. 다음 소스 코드를 참조하십시오.
public synchronized stringbuffer reverse () {super.reverse (); return this;} public int indexof (String str) {return indexof (str,); // 공개 동기화 된 int indexof (string str, int fromIndex) 메소드가 있습니다. StringBuilder는이 방법에 동기화 잠금을 추가하지 않으므로 스레드가 아닌 것입니다.
3. StringBuilder 및 StringBuffer 공통
StringBuilder와 StringBuffer에는 공개 부모 수업이 있습니다.
추상 클래스와 인터페이스의 차이점 중 하나는 일부 공개 서브 클래스 방법이 추상 클래스에서 정의 될 수 있다는 것입니다. 서브 클래스는 새로운 기능 만 추가하면되며 기존 방법을 반복 할 필요가 없습니다. 인터페이스는 방법과 상수 만 정의합니다.
StringBuilder 및 StringBuffer의 방법은 Super.Append (...)와 같은 AbstractStringBuilder에서 공개 방법을 호출합니다. StringBuffer는 메소드에 동기화 된 키워드를 추가하고 동기화하는 것입니다.
마지막으로, 프로그램이 다중 스레드가 아닌 경우 StringBuilder를 사용하는 것이 StringBuffer보다 효율적입니다.
Java의 StringBuffer StringBuilder의 차이 요약
* 문자열 클래스는 불변의 클래스입니다. 문자열이 수정되는 한 새 개체가 생성됩니다.
* StringBuffer 및 StringBuilder는 모두 변한 클래스이며 문자열 변경으로 새로운 객체가 생성되지 않습니다.
실제로 사용하면 삽입, 삭제 등과 같은 문자열을 자주 수정 해야하는 경우.
* 그러나 StringBuffer와 StringBuilder의 차이점은 무엇입니까?
StringBuffer는 스레드 안전이며 멀티 스레드 프로그램에서 사용하기에 매우 편리하지만 프로그램의 효율성은 느려집니다.
StringBuilder는 스레드 안전하지 않으며 단일 스레드에서 StringBuffer보다 효율적입니다.
* 일반적으로 세 가지의 실행 시간 :
String> StringBuffer> StringBuilder