String, StringBuffer, StringBuilder 셋 다 문자열을 다루는 클래스들이다.
StringBuffer/StringBuilder와 다르게 불변하는 특징을 가진다.
String으로 선언된 문자열을 수정할 경우 기존 값을 버리고 새로운 String 인스턴스를 만든다.
기존의 String이 할당되어있던 메모리는 Garbage collection에 의해 사라진다.
그러므로 문자열이 자주 변경될 경우에는 String을 쓰는 것이 매우 비효율적일 수 있다.
그러나 불변하기 때문에 멀티쓰레드 환경에서 사용하기 좋으며, 값의 수정이 일어나지 않을 경우 성능이 좋다.
둘 다 가변성을 가지기 때문에 값을 변경할 때에도 동일한 메모리 영역에서 변경이 된다.
차이점 | StringBuffer | StringBuilder |
---|---|---|
동기화 | o | x |
멀티쓰레드 환경 | 안정 | 불안정 |
성능 | bad | good |
method | 기능 |
---|---|
append(v) | 맨 뒤에 값 v를 추가한다. |
insert(i, v) | i index에 v값을 삽입한다. |
delete(i1, i2) | i1 index부터 i2인덱스까지 값을 삭제한다. |
indexOf(v) | v 값이 어느 index에 있는지 알려준다. |
subString(i1, i2) | i1 index부터 i2 index까지의 값을 알려준다. |
length() | 전체 길이 |
replace(i1, i2, v) | i1 index부터 i2 index까지의 값을 v로 변경한다. |
reverse() | 글자 순서를 뒤집는다. |
출처
https://ifuwanna.tistory.com/221
https://wakestand.tistory.com/245