> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/java/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/java/java.lang-package-and-useful-class/stringbuffer-class.md).

# StringBuffer class

String처럼 문자형 배열(char\[ ])을 내부적으로 가지고 있다.

그러나 String과 달리 내용을 변경할 수 있다.(mutable)

```java
public final class StringBuffer implements java.io.Serializable {
    private char[] value;
}
```

**append() :** 내용을 변경할 수 있다. append()는 지정된 내용을 StringBuffer에 추가한 후, StringBuffer의 참조를 반환한다!

delete() : 삭제

insert() : 삽입

```java
StringBuffer sb = new StringBuffer("abc");
sb.append("123");//abc123
sb.append("ZZ");//abc123ZZ

StringBuffer sb2 = new StringBuffer("abc");
sb.append("123").append("ZZ");//sb.append("123") = sb이다!
```

![](https://513632279-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHGT1oKZbTmlBrsOv_R%2F-MISfQ-gIdqIFiX8GjiB%2F-MISi0pohRU5NhrxrSGd%2Fimage.png?alt=media\&token=e9ad3f07-df1a-447a-b156-3762131f6461)

**배열은 길이 변경불가하기 때문에 StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야한다.**

**공간이 부족하다면:**

1. **새로운 배열 생성**
2. **내용 복사**
3. **참조 변경**

```java
public StringBuffer(int length) {
    value = new char[length];
    shared = false;
}
public StringBuffer() {
    this(16);//버퍼의 크기를 지정하지 않으면 버퍼의 크기는 16이 된다.
}
public StringBuffer(String str) {
    this(str.length() + 16);//지정한 문자열의 길이보다 16이 더 크게 버퍼를 생성한다.
    append(str);
}
```

StringBuffer는 equals()가 오버라이딩되어있지 않다.(주소비교) 그렇기 때문에 toString()을 사용하여 String으로 형변환을 해서 비교한다.

```java
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");

System.out.println(sb==sb2);//false
System.out.println(sb.equals(sb2));//false

String s = sb.toString();
String s2 = sb2.toString();

System.out.println(s.equals(s2));
```

* StringBuffer의 메서드

| Method                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | Description                                                                                                                                    | Example                                                                                                                                                                                                                                                         |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| StringBuffer()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 16문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다. (16은 의미없고, char형 배열을 생성한다고 생각하면 된다.)                                                             | StringBuffer sb = new StringBuffer();                                                                                                                                                                                                                           |
| StringBuffer(int length)                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다.                                                                                            | StringBuffer sb = new StringBuffer(10);                                                                                                                                                                                                                         |
| StringBuffer(String str)                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 지정된 문자열 값(str)을 갖는 StringBuffer 인스턴스를 생성한다.                                                                                                    | sb = "Hi"                                                                                                                                                                                                                                                       |
| <p>StringBuffer append(<strong>boolean</strong> b)</p><p>StringBuffer append(<strong>char</strong> c)</p><p>StringBuffer append(<strong>char\[ ]</strong> str)</p><p>StringBuffer append(<strong>double</strong> d)</p><p>StringBuffer append(<strong>float</strong> f)</p><p>StringBuffer append(<strong>int</strong> i)</p><p>StringBuffer append(<strong>long</strong> l)</p><p>StringBuffer append(<strong>Object</strong> obj)</p><p>StringBuffer append(<strong>String</strong> str)</p> | 매개변수로 입력된 값을 **문자열로 변환**하여 StringBuffer 인스턴스가 저장하고 있는 문자열의 뒤에 덧붙인다.                                                                            | <p>StringBuffer sb = new StringBuffer("abc");</p><p>StringBuffer sb2 = sb.append(true);</p><p>sb.append('d').append(10.0f);</p><p></p><p>StringBuffer sb3 = sb.append("ABC").append(123);</p><p></p><p>//sb = ?</p>                                             |
| int capacity()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | StringBuffer인스턴스의 버퍼크기를 알려준다. length()는 버퍼에 담긴 문자열의 길이를 알려준다.                                                                                  | <p>StringBuffer sb = new StringBuffer(100);</p><p>sb.append("조흔나사랑해");</p><p>int bufferSize = sb.capacity();//100</p><p>int stringSize = sb.length();//6</p>                                                                                                    |
| char charAt(int index)                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 지정된 위치(index)에 있는 문자를 반환한다.                                                                                                                    | <p>StringBuffer sb = new StringBuffer("흔나조");</p><p>char c = sb.charAt(2);//조</p>                                                                                                                                                                               |
| StringBuffer delete(int start, int end)                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 시작위치(start)부터 끝 위치(end) 사이에 있는 문자를 제거한다. **단,Java에서는  끝 위치의 문자는 제외.**                                                                          | <p>StringBuffer sb = new StringBuffer("0123456");</p><p>StringBuffer sb2 = sb.delete(3,6);//0126</p>                                                                                                                                                            |
| StringBuffer deleteCharAt(int index)                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 지정된 위치(index)의 문자를 제거한다.                                                                                                                       | <p>StringBuffer sb = new StringBuffer("0123456");</p><p>sb.deleteCharAt(3);//012456</p>                                                                                                                                                                         |
| <p>StringBuffer insert(int pos,boolean b)</p><p>StringBuffer insert(int pos,char c)</p><p>StringBuffer insert(int pos,char\[ ] str)</p><p>StringBuffer insert(int pos,int i)</p><p>StringBuffer insert(int pos,double d)</p><p>StringBuffer insert(int pos,float f)</p><p>StringBuffer insert(int pos,long l)</p><p>StringBuffer insert(int pos,Object obj)</p><p>StringBuffer insert(int pos,String str)</p>                                                                                  | <p>append처럼 각종 데이터 타입을 받을 수 있다. 다만, insert는 삽입하는 것이므로 삽입하는 위치(pos)도 필요하다.</p><p>두 번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치(pos)에 추가한다. pos는 0부터 시작.</p> | <p>StringBuffer sb = new StringBuffer("0123456");</p><p>sb.insert(4, '<strong>.</strong>' );//0123.456</p>                                                                                                                                                      |
| int length()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | StringBUffer 인스턴스에 저장되어 있는 문자열의 길이를 반환한다.                                                                                                      | <p>StringBuffer sb = new StringBuffer("01234");</p><p>int length = sb.length();//5</p>                                                                                                                                                                          |
| StringBuffer replace(int start, int end, String str)                                                                                                                                                                                                                                                                                                                                                                                                                                           | 지정된 범위(start\~end)의 문자들을 주어진 문자열로 바꾼다. end위치의 문자는 범위에 포함되지 않는다. (start <= x < end)                                                             | <p>StringBuffer sb = new StringBuffer("0123456");</p><p>sb.replace(3,6,"AB");//012AB6</p>                                                                                                                                                                       |
| StringBuffer reverse()                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | StringBuffer 인스턴스에 저장되어 있는 문자열의 순서를 거꾸로 나열한다.                                                                                                  | StringBuffer sb = new StringBuffer("01234");//43210                                                                                                                                                                                                             |
| void setCharAt(int index, char ch)                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 지정된 위치(index)의 문자를 주어진 문자(ch)로 바꾼다.                                                                                                            | <p>StringBuffer sb = new StringBuffer("01234");</p><p>sb.setCharAt(4,'흔');//0123흔</p>                                                                                                                                                                           |
| void setLength(int newLength)                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 지정된 길이로 문자열의 길이를 변경한다. 길이를 늘리는 경우에 나머지 빈 공간을 null문자 '\u000'로 채운다.                                                                              | <p>StringBuffer sb = new StringBuffer("0123456");</p><p>sb.setLength(5);//"01234"</p><p></p><p>StringBuffer sb2 = new StringBuffer("0123456");</p><p>sb2.setLength(10);//"0123456    "<br>//양쪽 공백문자 제거</p><p>String str = sb2.toString().trim();//"0123456"</p> |
| String toString()                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | StringBuffer 인스턴스의 문자열을 String으로 반환.                                                                                                           | <p>StringBuffer sb = new StringBuffer("01234");</p><p>String str = sb.toString();//"01234"</p>                                                                                                                                                                  |
| <p>String substring(int start)</p><p>String substring(int start, int end)</p>                                                                                                                                                                                                                                                                                                                                                                                                                  | <p>말 그대로 substring을 뽑아낸다.</p><p>지정된 범위 내의 문자열을 String으로 뽑아서 반환한다. 시작위치(start)만 지정하면 시작위치부터 문자열 끝까지 뽑아서 반환한다.</p>                               | <p>StringBuffer sb = new StringBuffer("0123456");</p><p>String str = sb.substring(3);//"3456"<br>String str2 = sb.substring(3,5);//"34" </p><p></p>                                                                                                             |
