String처럼 문자형 배열(char[])을 내부적으로 가지고 있다.
- 문자열을 저장하고 다루기 위한 클래스
public final class StringBuffer implements java.io.Serializable { private char[] value; ... }
- 그러나, String과 달리 내용을 변경할 수 있다.(mutable)
- StringBuffer를 만든 후, 문자열 abc를 저장하는 배열을 만들면, char배열이 만들어지고 거기에 abc가 저장된다.
- append를 사용해서 새로운 문자열을 추가할 수 있다.(= 내용 변경이 가능하다.)
배열은 길이 변경불가. 공간이 부족하면 새로운 배열 생성해야
- 길이가 5인 배열을 저장 후 새로운 값을 넣고 싶을 때는 공간부족
- 그래서 1.새로운 배열을 생성해서 2.기존의 내용을 복사해서 3.참조변경을 해준다.
StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야
StringBuffer는 String과 달리 내용 변경이 가능하다.
StringBuffer sb = new StringBuffer("abc"); sb.append("123"); // sb의 내용 뒤에 "123"을 추가한다.
append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환
- append() : 끝에 문자열 추가 / delete() : 삭제 / insert() : 삽입
- "ZZ"를 sb에 추가하고 그 추가된 sb의 주소가 sb2에 저장된다.
- 왼쪽 코드보다 오른쪽의 코드가 더 간결해진다.
StringBuffer는 equals()가 오버라이딩 되어 있지 않다.(주소비교)
- this = obj가 되며, 그로 인해 내용이 같아도 주소가 다르므로 false가 출력된다.
StringBuffer을 String으로 변환 후에 equals()로 비교해야 한다.
- StringBuffer에 toString을 붙여 String으로 변환하고 equals를 통해 비교하면 true 값을 얻을 수 있다.
- 생성자에 아무것도 없다면, 길이가 16인 배열이 생성된다.
- length를 넣으면 길이가 10인 배열이 만들어진다.
- 2글자의 문자열을 생성하면, 2글자의 문자열 + 16 배열 = 길이 18이 된다.
- append : 문자열을 추가한다. (모든 타입이 가능하다.)
- 문자열 abc를 가지는 sb가 생성된다.
- sb2는 boolean 값이지만, char 타입이므로 abc 뒤에 true문자열이 붙는다.
- 문자 d와 10.0을 뒤에 추가한다.(f는 접미사라 붙지 않는다.)
- sb3은 ABC와 123을 추가한다.
- 결국, sb와 sb2, sb3 모두 같은 StringBuffer 객체를 가르키게 된다.
- capacity : 버퍼 크기를 알려준다. / length : 문자열의 길이를 알려준다.
- charAt : 지정된 위치의 문자를 반환한다.
- delete : 시작위치 ~ 끝위치까지의 문자를 삭제한다. (문자 n개 제거) / 끝 문자는 제외
- deleteCharAt : 지정된 위치의 문자 제거 (문자 1개 제거)
- insert : 지정된 위치에 여러 타입의 값 추가(position은 지정된 위치) / append는 위치 지정 X
- length : StringBuffer에 저장되어 있는 문자열의 길이를 반환
- replace : 시작위치 ~ 끝위치까지의 문자를 변경한다.
- reverse : 문자열의 순서를 거꾸로 나열한다.
- setChartAt : 문자를 주어진 문자로 바꾼다.
- setLength : 문자열의 길이를 변경한다. (기존의 값보다 더 길게 변경할 경우 null문자가 추가된다.)
- toString : StringBuffer를 String으로 변경한다.
- subString : 문자열의 일부를 잘라낸다. (end가 없다면, 시작위치~끝 / end가 있다면, 시작위치~끝위치)
- sb(0x100) -> 01
- sb2(0x100) -> 0123
- append -> 0123456 // 메서드 체이닝 : 메서드를 연결해서 호출하는 것.
- sb3(0x100) -> 012345678
- sb3.append -> 0123456789.0
- sb.deleteAt(10) -> 10의 자리수까지 반올림(01234567890)
- sb.delete(3,6) -> 3번째 자리~6번째 자리 삭제(01267890)
- sb.insert(3,"abc") -> 3번째 자리에 abc 추가 (012abc67890)
- sb.replace(6, sb.length(), "END") -> 6자리의 문자열로 만들고, 뒤에 END를 추가(012abcEND)
- capacity -> 배열의 길이(18자리)
- length -> 문자열의 길이(9자리)