내부를 보면 변수를 final로 지정해서 바꾸지 못한다.
String a = "a"; // 메모리공간 1 -> a = "b";를 계속 사용하게 된다면 GC에 의해 사라진다.
String a = "b"; // 메모리공간 2
// 메모리 공간이 많이 사용되어 성능이 좋지않다.
StringBuffer a = new StringBuffer("a"); -> "a" / 메모리 공간 1
a.append("b"); -> "ab" / 메모리 공간 1
StringBuffer | StringBuilder | |
---|---|---|
멀티쓰레드 환경에서 안전한가? (동기화를 지원) | O | X |
StringBuffer는 쓰레드에 안전한가? 이걸 체크하기 때문에 체크하는 과정에서 시간이 상대적으로 많이 소모된다.
StringBuilder는 쓰레드에 안전한지 체크를 안하기 때문에 시간이 적게 소모된다.
String | StringBuffer | StringBuilder | |
---|---|---|---|
가변 여부 | 불변 | 가변 | 가변 |
연산 속도 | 느림 | 빠름 | 아주 빠름 |
쓰레드 세이프 | O | O | X |
참고
https://inpa.tistory.com/entry/JAVA-☕-String-StringBuffer-StringBuilder-차이점-성능-비교