
JAVA8 docs의 String 클래스 부분을 보면,
String은 각각의 character들의 모음(연속체)이며, 상수이다. char[]로 이루어져 있다는 것을 알 수 있다.StringBuffer 또는 StringBuilder를 통해 문자열 변경을 지원한다고 한다.
+ 연산자에 대한 기능을 지원한다고 쓰여있다. + 연산자로 문자열을 합칠 수 있는 기능은 StringBuilder 클래스와 StringBuffer 클래스를 통해 구현된다.String은 final 클래스이다. 따라서 String class를 상속받을 수 없다.
- String은 한 번 생성하면 바꿀 수 없다.
- 그러나 + 연산이 가능하다.
- 따라서 연산을 거친 이후에는 새롭게 String이 생성된다는 것을 파악할 수 있다.

StringBuilder 클래스 부분을 보면, 변경이 가능한 character들의 sequence이다. String과 차이를 보인다. (ArrayList에서 원소를 관리하듯이 추가가 용이하다.)StringBuffer보다 빠르다. (대부분의 경우 StringBuilder를 쓰는 이유)
StringBuffer 클래스 부분을 보면, 변경이 가능한 character들의 sequence이다.String과 차이를 보인다. (ArrayList에서 원소를 관리하듯이 추가가 용이하다.)Stringbuilder와 달리 thread-safe하다고 쓰여있다.종합해보면,
StringBuilder와StringBuffer는 모두 변경이 가능한 character들의 sequence이다.- 따라서
String에 비해 문자열 변경에 관하여 메모리를 아낄 수 있다.(새로 생성되지 않고 추가되므로)StringBuilder는 단일 스레드에서만 관리되기 때문에 속도 측면에서 빠르다.StringBuffer는 멀티 스레드에서도 관리가 되지만 속도 측면에서는 느리다.- 따라서 대부분의 경우에는
StringBuilder를 이용하지만, multi thread 환경에서 안전하게 데이터를 관리하기 위해서는StringBuffer를 이용해야 한다.