모두 문자열을 사용할때 쓰게되는 클래스들이다.
String은 immutable(불변), StringBuffer/StringBuilder는 mutable(변경가능) 이라는 기본적인 차이가 존재한다.
String의 경우 '+'연산자를 사용하여 문자열을 덧붙일때, 새로운 인스턴스를 생성한다. 2글자에 1글자를 합치게되면 2+1이 아니라 2 + (2 + 1)이 되는 셈이라고 생각하면 될듯하다.
반면에 StringBuilder와 StringBuffer의 경우 할당된 버퍼의 크기를 늘려가면서 가변적으로 동작한다. 위의 String과 달리 글자를 덧붙이면 기존의 메모리할당에서 필요한 만큼만 늘어난다고 생각하면 될듯하다.
StringBuffer는 멀티쓰레드 환경에서도 동기화를 지원하여 안전하게 사용할 수 있다.
StringBuilder는 멀티쓰레드 환경에서 동기화를 지원하지 않는다는 차이점이 있다.
StringBuilder는 StringBuffer와 달리 동기화에 대한 지원이 없어 해당 처리 과정이 없으므로, 단일스레드 환경에서는 더 좋은 퍼포먼스를 보여준다.