1. String은 내부 문자열을 수정할 수 없다.
-> String data = "ABC"를 할 경우
data += "DEF"를 한다면 "ABC"와 "ABCDEF" 두가지의 메모리 영역이 생긴다.
![](https://velog.velcdn.com/images/tarantula/post/f264a59d-d502-43d1-91b4-6fc2252c27b7/image.png)
data는 메모리 스택 영역에 저장되고 "ABC", "ABCDEF"는 메모리 힙 영역에 저장된다.
2. StringBuilder와 StringBuffer 공통점, 차이점
-공통점
- 버퍼에 문자열을 저장한다.
- 버퍼 내부에서 추가, 수정, 삭제 작업을 할 수 있다.
- 사용법이 같다.
-차이점
-> 멀티 스레드 환경이라면 StringBuffer를 사용해야 한다.
3. 주요 메서드
append(String str):
- 문자열의 끝에 다른 문자열을 추가
예: sb.append("Hello") → "Hello"
insert(int offset, String str):
- 특정 위치에 문자열을 삽입
예: sb.insert(1, "World") → "HWorldello"
delete(int start, int end):
- 지정된 범위의 문자를 삭제
예: sb.delete(1, 3) → "Hlo"
replace(int start, int end, String str):
- 지정된 범위의 문자열을 새로운 문자열로 대체
예: sb.replace(0, 5, "Hi") → "Hi"
reverse():
- 문자열을 뒤집음
예: sb.reverse() → "olleH"
toString():
- StringBuffer 또는 StringBuilder 객체를 String으로 변환
예: sb.toString() → "Hello"
setCharAt(int index, char ch):
- 특정 인덱스의 문자를 변경
예: sb.setCharAt(1, 'a') → "Hallo"
capacity():
- 현재 StringBuffer 또는 StringBuilder 객체의 용량(버퍼 크기)을 반환
예: sb.capacity()
ensureCapacity(int minimumCapacity):
- 최소 용량을 보장합니다. 현재 용량이 minimumCapacity보다 작으면, 더 큰 버퍼로 확장
substring(int start, int end):
- 지정된 범위의 문자열을 반환
예: sb.substring(0, 4) → "Hell"