우선 String과 StringBuffer/StringBuilder의 가장 큰 차이는 String은 immutable(불변)이고 StringBuffer/StringBuilder는 mutable(가변)이라는 것입니다.
그래서 String은 값이 변경되더라도 실제 값은 메모리 영역에 Gabege로 남아있고, 새로운 인스턴스를 생성하여 그 주소를 가리키게 됩니다.
하지만 StringBuffer/StringBuilder는 append()
delete()
와 같은 메서드를 통해서 동일 객체내에서 문자열을 변경할 수 있습니다.
따라서 문자열의 추가,수정,삭제가 빈번하게 발생할 경우라면 String 클래스가 아닌 StringBuffer/StringBuilder를 사용해야합니다.
동일한 API를 가지고 있는 StringBuffer, StringBuilder의 차이점은 동기화의 유무입니다.
StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전(thread-safe) 합니다.
하지만 StringBuilder는 동기화를 지원하지 않기 때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어납니다.