String 객체는 수정 불가능한 문자열을 생성
-> 한 번 생성되면 내용 못 바꿈
String s = new String("Hello");
String t = s.concat("World");

s.concat("World"); 의 실행해도 String s는 변경되지 않음
한 번 만들어진 String 객체는 수정이 불가하기 때문에 문자열을 변경하기 위해선 다음과 같이 해야 함.
s = s.concat("Java");

그렇게 되면 가비지 객체가 생성됨.
가비지는 더 이상 참조되지 않음 -> 가비지가 차지하는 메모리 공간 회수 되어야 함.
만약 위 작업을 100만 번 수행한다면 그만큼 가비지가 늘어나며 최악의 경우 가용 메모리가 0이 되어 자바 응용프로그램을 더 이상 실행할 수 없게 됨.
(근데 이런 극한의 상황은 잘 일어나지 않음ㅎ)
대안 ->
StringBuilder 객체는 수정 가능한 문자열을 생성
생성자
// 객체 선언
StringBuilder sb = new StringBuilder();
// 문자열 넣은채로 선언 가능
StringBuilder sb = new StringBuilder("HelloWorld");
주요 메소드
| 메서드 | 내용 |
|---|---|
| append(String str) | 문자열을 추가 |
| insert(int offset, String str) | offset 위치에 str을 추가 |
| replace() | 첫번째와 두번째 파라미터로 받는 숫자 인덱스에 위치한 문자열을 대체 |
| substring(int start) | start부터 끝까지 인덱싱 |
| substring(int start, int end) | start부터 end-1까지 인덱싱 |
| deleteCharAt(int index) | 인덱스에 위치한 문자 하나를 삭제 |
| delete(int start, int end) | start 부터 end-1 까지의 문자를 삭제 |
| toString() | String으로 변환 |
| reverse() | 해당 문자 전체를 뒤집음 |
| setCharAt(int index, String s) | index 위치의 문자를 s로 변경 |
| setLength(int len) | 문자열 길이 조정 현재 문자열보다 길게 조정하면 공백으로 채워짐, 현재 문자열보다 짧게 조정하면 나머지 문자는 삭제 |
| trimToSize() | 문자열이 저장된 char[] 배열 사이즈를 현재 문자열 길이와 동일하게 조정 String 클래스의 trim()이 앞 뒤 공백을 제거하는 것과 같이 공백 사이즈를 제공하는 것, 배열의 남는 사이즈는 공백이므로, 문자열 뒷부분의 공백을 모두 제거해준다고 보면 됨 |
사용 예시
프로그래머스 lv.0 문자열 뒤집기
append(String str)
reverse()
toString()
import java.util.*;
class Solution {
public String solution(String my_string) {
String answer = "";
// StringBuilder 객체 선언
StringBuilder sb = new StringBuilder();
// 선언부에서
//StringBuilder sb = new StringBuilder(my_string); 로 대체 가능
// 문자열을 추가해 줌
sb.append(my_string);
// 문자열을 뒤집어 줌
sb.reverse();
// String으로 변환해 줌
answer = sb.toString();
return answer;
}
}