String, StringBuilder, StringBuffer 차이점

기록·2022년 12월 2일
0

String: 불변
StringBuilder, StringBuffer: 가변

String str = "abc";
str += "def";

String 클래스는 불변이기 때문에, 참조변수 str이 가리키는 곳에 "abc"에 def"가 더해지는 것이 아닌,
새로운 메모리 영역을 생성하여 "abcdef"를 가리킨다.
"abc" 메모리 영역은 Garbage로 남아있다가 GC에 의해 사라진다.

*문자열의 추가, 수정, 삭제등의 연산이 빈번하게 일어난다면 String 클래스를 사용할때 힙 메모리에 많은 임시 Garbage가 생성된다. 힙 메모리 부족의 가능성이 있다.


StringBuffer, StringBuilder는 append(), delete()를 사용한다.
StringBuilder는 문자열을 더할 때, 새로운 객체를 생성하지 않고 기존의 데이터에 더하는 방식이다.

만든 문자열을 출력할때는 toString()을 사용하면 된다.

StringBuilder builder = new StringBuildere();
builder.append("abc");
builder.append("def");
System.out.println(builder.toString());


StringBuffer는 동기화키워드를 지원하고, 멀티쓰레드에 안정적
StringBuilder는 동기화키워드 지원안함. 단일쓰레드에 성능 뛰어남.
String은 불변성이라 멀티쓰레드에 안정적이다.

성능비교: StringBuilder

동기화키워드가 뭐가 있는지에 알아봤다.

0개의 댓글