반응형
빌더는 Capacity와 count를 갖고있다. 빌더 안에서 문자열을 합쳐도 StringBuilder의 capacity를 넘지 않는다면 new 연산을 하지 않음
이유는 아래 설명을 통해 풀어가보겠다
StringBuilder : 기존의 capacity일 때는 새로운 메모리에 문자열을 추가하는 것이 아닌 기존의 메모리에 담기 때문에.
String은 불변하고, 불변성의 특징을 갖기 때문에 문자열을 추가할 때는 두개를 서로 붙여서 새로운 메모리를 할당하는 new 연산이 들어감
추가로 StringBuilder와 기능은 동일한 StringBuffer를 사용한다면 성능이 약간 낮아지는 대신에 Thread-Safe하다는 것까지 체크하면 좋을 것 같다.
문자열 합칠 때 비교
- String : 무조건 new String(a + b);
- StringBuilder : a.length+b.length < capacity ? StringBuilder(a + b) : new StringBuilder(a + b);
String클래스의 배열 final byte[]
StringBuilder는 추상클래스AbstractStringBuilder를 상속받고, 해당 클래스에서 char[]배열은 final선언이 안되어있음
때문에 동작은 아래와 같음
결론 : 문자열을 더할 때는 String 대신 StringBuilder나 StringBuffer를 사용하자.
참고 사이트 : https://cjh5414.github.io/why-StringBuffer-and-StringBuilder-are-better-than-String/
반응형