(1) String, StringBuffer, StringBuilder란?
(2) String, StringBuffer, StringBuilder 차이점은?
- String - 한번 생성되면 할당된 메모리 공간이 변하지 않습니다. + 연산자 또는 concat 메서드를 통해 기존에 생성된 String 클래스 객체 문자열에 다른 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 것이 아니라, 새로운 String 객체를 만든 후, 새 String 객체에 연결된 문자열을 저장하고, 그 객체를 참조하도록 합니다.
- StringBuffer, StringBuilder - 크기가 유연하게 변하는 가변적인 특성을 가지고 있으며 제공하는 메서드도 같고 사용하는 방법도 동일합니다. 하지만 두 클래스는 동기화 지원의 유무가 다릅니다. StringBuffer는 각 메서드 별로 synchronized keyword가 존재하여 멀티 스레드 상태에서 동기화를 지원하고 StringBuilder는 단일 스레드 환경에서만 사용하도록 설계되어 있습니다. StringBuilder가 StringBuffer보다 속도는 더 빠르지만 현업에서는 언제 멀티스레드 환경에서 돌아가지 알지 못하기에 안정적인 StringBuffer로 통일하여 코딩하는것이 좋습니다.
|
String |
String Buffer |
String Builder |
저장소 |
String pool |
Heap |
Heap |
수정 가능 |
No (immutable) |
Yes (mutable) |
Yes (mutable) |
스레드 동기화 |
Yes |
Yes |
No |
퍼포먼스 |
Fast |
Slow |
Fast |
참조 - https://ifuwanna.tistory.com/221, https://coding-factory.tistory.com/546