반응형
String
- immutable(불변)
- 리터럴을 통해 생성되면(String a="hello";) 그 인스턴스의 메모리 공간은 변하지 않음
- 리터럴로 생성하면 "String Pool"에 생성
- 문자열 값이 변경되면 String Pool의 공간에 메모리를 할당받아 새로운 String 클래스 객체를 만듬 (원래 문자열을 가비지컬렉터를 통해 삭제돼야함, 언제사라질 지는 모름)
- 문자열 연산이 많아지면 객체를 계속 새로 만드므로 성능 저하
- 대신 String 클래스는 "불변"하므로 단순히 "조회" 연산에서는 속도가 빠름
- 멀티쓰레드에서도 동기화를 신경쓸 필요가 없다
= 문자열 연산이 적고, 자주 참조(조회)하는 경우 좋다.
StringBuffer & StringBuilder (공통점)
- mutable (가변)
- 문자열 연산을 할 때 클래스는 한번만 만들고(new), 메모리의 값을 변경시켜서 문자열 값 변경.
- 메모리가 같아서 호환(?) 가능
StringBuffer
- 멀티 쓰레드 환경에서 synchronized 키워드가 사용가능하므로 동기화 가능(thread-safe)
= 문자열 연산이 많은 멀티쓰레드 환경에서 용이.
StringBuilder
- 동기화를 지원하지 않는다 (thread-safe 하지않다)
- 싱글쓰레드 환경에서 StringBuffer에 비해 연산처리가 빠르다.
= 문자열 연산이 많은 싱글쓰레드 환경에서 용이.
반응형
'JAVA' 카테고리의 다른 글
해시(Hash) & 해시셋(HashSet) & 해시맵(HashMap) (0) | 2020.06.28 |
---|---|
ORM(Object-Relational Mapping), JPA(Java Persistence API) (0) | 2020.06.28 |
JAVA SE 와 JAVA EE (0) | 2020.06.25 |
스레드 (Thread) (0) | 2020.06.08 |
댓글