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");
StringBuffer는 StringBuilder와 같은 방식으로 동작한다.
차이점은 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 |