문자열 객체의 가장 큰 특징은 문자열 불변이다. 앞서 배운 String 클래스를 활용해 문자열을 생성할 경우, 문자열을 수정할 수 없다.

첨부한 이미지와 마찬가지로 하나의 참조형 변수에 문자열을 여러번 거듭해 대입한다면,
String str1 = "봄";
String str1 = "봄 여름";
String str1 = "봄 여름 가을";
이는 원래 있던 객체에 문자열을 추가하는 것이 아니라 기존의 참조를 끊고 새로운 객체를 생성하는 것이다.
따라서 끊긴 객체의 경우 '쓰레기 객체'가 되며, 자바는 소멸자가 존재하지 않기 때문에 직접 삭제할 수 없고, 메모리 부족 시 가비지 콜렉터가 알아서 삭제하기를 기다리는 수밖에 없다.
이렇게 문자열 가공 시 프로그램이 느려지는 것을 보완하기 위해 'StringBuffer' 클래스가 탄생했다.
수정할 때마다 새로 객체를 만들어야 하는 String과 달리 '객체를 하나만' 만든다는 특징을 갖는다.
package kr.s27.lang.stringbuffer;
public class StringBufferMain {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("여름 덥다!!");
//0123456
System.out.println("1:" + sb);
sb.insert(2, '이');
System.out.println("2:" + sb);
sb.append("가을은 ");
System.out.println("3:" + sb);
sb.append("시원하다.");
System.out.println("4:" + sb);
sb.replace(0, 3, "여행가자!!");
System.out.println("5:" + sb);
sb.deleteCharAt(0);
System.out.println("6:" + sb);
sb.delete(0, 3);
System.out.println("7:" + sb);
String str = sb.toString();
System.out.println("str = " + str);
}
}
StringBuffer sb = new StringBuffer("여름 덥다!!");
//0 123 456
StringBuffer 클래스가 가지고 있는 메서드는 다음과 같다.
sb.insert(2, '이');
System.out.println("2:" + sb);
출력 결과)
2:여름이 덥다!!
sb.append("가을은 ");
System.out.println("3:" + sb);
출력 결과)
3:여름이 덥다!!가을은
sb.append("시원하다.");
System.out.println("4:" + sb);
출력 결과)
4:여름이 덥다!!가을은 시원하다.
sb.replace(0, 3, "여행가자!!");
System.out.println("5:" + sb);
출력 결과)
5:여행가자!! 덥다!!가을은 시원하다.
sb.deleteCharAt(0);
System.out.println("6:" + sb);
출력 결과)
6:행가자!! 덥다!!가을은 시원하다.
sb.delete(0, 3);
System.out.println("7:" + sb);
출력 결과)
7:!! 덥다!!가을은 시원하다.
String str = sb.toString();
System.out.println("str = " + str);
출력 결과)
str = !! 덥다!!가을은 시원하다.