Programing Language/JAVA

String , StringBuffer , StringBuilder

칼쵸쵸 2021. 2. 21. 21:24

String

String a = "Hi";
a = a += "Bye";

JAVA는 문자열에 대해서 편의상 "+" 연산자를 지원하는데

String 의 경우 위와 같이 a를 선언한뒤 a에 + 연산자를 사용할 경우 힙 메모리에 새로운 문자열("HiBye")을 생성후 스택 영역에 저장된 변수 a 에 대한 reference를 변환하는 방식을 사용한다.

따라서 메모리상 불필요한 문자열("Hi")이 남게 된다.

문자열을 변환시 Immutable하다.

 

StringBuilder

StringBuilder a = new StringBuilder("Hi");
a.append("Bye");

StringBuilder의 경우 기존에 선언된 문자열에 추가적인 문자열을 append를 통해서 추가하게 된다.

 

기존의 a가 가지고 있던 Stack영역은 변경되지 않고 Heap 에 저장된 "Hi" 라는 문자열에 "Bye"를 추가하는 방식으로 변경된다.

따라서 메모리의 낭비가 발생하지 않는다. 

빈번한 문자열 변경이 일어나는 경우 StringBuilder가 String 보다 더 빠른 속도로 처리하게 된다.

StringBuffer

StringBuffer a = new StringBuffer("Hi");
a.append("Bye");

StringBufferStringBuilder와 같은 방식으로 동작한다.

차이점은 StringBuffer는 다중쓰레드 상태에서 동기화를 지원한다.

따라서 다중 쓰레드에서 안정적인 자원공유 환경을 구성할 수 있다.

대신 StringBuilder보다 기본적인 처리속도가 느리다.

 

'Programing Language > JAVA' 카테고리의 다른 글

Abstract Class와 Interface의 차이  (0) 2021.02.22
New String 과 Literal String  (0) 2021.02.22
AutoBoxing vs UnBoxing  (0) 2021.02.21
Platform Independent Language  (0) 2021.02.21
JAVA Stream API -1 (기본 사용법)  (0) 2021.01.21