String,StringBuffer,StringBuilder의 차이


String은 불가변적이다.

StringBuffer,StringBuilder은 가변적이다.


String 객체는 Heap메모리에 생성되면 변하지않는다.

변경하게되면 새로운 객체를 생성해야한다.

ex)

String s = "a";

s = s + "b";


String 는 객체(Heap메모리) s는 reference 값(Stack메모리)이다.

String s = "a";

s(reference값)은 Heap 메모리의 "a"의 주소값을 보고 있다.


s = s + "b"; 를 하게되면 

s(reference값)가 보고있는 "a"값에 "b"를 추가하는것이아닌

"ab"라는 객체를 다시만들고 그 객체의 reference값으로 바꾼다.


ex)StringBuffer ,StringBuilder 동일하다.

StringBuffer s = new StringBuffer("a");

s.append("b");


StringBuilder,StringBuffer 는 객체(Heap메모리) s는 reference 값(Stack메모리)이다.

차이점은 StringBuilder,StringBuffer는 객체를 새로 생성하지않고

기존 객체에 값을 추가한다.


개발시에 문자열 병합이 빈번하게 일어나면 StringBuilder,StringBuffer를 사용하는게 좋다.


StringBuilder,StringBuffer 차이는?


synchronization(동기화)지원여부의 차이다.


synchronization란?

하나에 제한되어있는 데이터를 여러 스레드가 공유가 사용할때

데이터가 깨지지않게 줄을세워 키를 가지고 있는 데이터를 처리하고 나머지데이터는 대기시킨다.

데이터무결성을 보장할 수 있다.


StringBuffer는 동기화를 지원하고

StringBuilder는 동기화를 지원하지 않는다.


멀티스레드를 사용하지 않는다면 

StringBuffer보단 StringBuilder가 빠르다.


+ Recent posts