본문 바로가기

Java

Object클래스 - StringBuffer, StringBuilder

출처 - Java의 정석 기초편 (남궁 성)

 

 

1. StringBuffer클래스

- 문자열을 저장, 다루기 위한 클래스

- String처럼 문자형 배열(char [])을 가지고 있음

- String과 달리 내용 변경 가능 (mutable)

 

StringBuffer sb = new StringBuffer("abc");
sb.append("123") // 문자열 추가 가능

 

 

2. StringBuffer 생성자

- 저장할 문자열 길이를 고려해서 적절한 크기로 생성

- 배열 길이 변경 불가, 공간 부족시 새로운 배열 생성

- 새로운 배열 생성 → 내용 복사 → 참조변경

 

char newValue[] = new char[newCapacity]; // 새로운 배열 생성 (Capacity 정수값)
System.arraycopy(value, 0, newvalue, 0, count); // 내용 복사 (count 문자열 길이)
value = newValue; // 참조변경

 

 

3. StringBuffer 변경

- 내용 변경 가능

- append()는 반환타입이 StringBuffer인데 객체 자신의 주소 반환

- append(끝에 문자열 추가), insert(삽입), delete(삭제)

 

Stringbuffer sb = new StringBuffer("abc");
sb.append("123");
sb.append("ZZ");
// sb.append("123").append("ZZ"); 메서드 체이닝 (성능 차이 없음)

 

 

4. StringBuffer 비교

- StringBuffer는 equals()가 오버라이딩 되어 있지 않음(=주소비교)

- StringBuffer는 String으로 변환 후 equals()로 비교

 

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

System.out.pringln(sb==sb2); // flase
System.out.pringln(sb.equals(sb2)); // flase

Striing s = sb.toString(); // Stringbuffer를 String으로 변환
String s2 = sb2.toString();

System.out.println(s.equals(s2)); // true

 

 

5. StringBuffer 생성자와 메서드

- 내용 변경 가능한 메서드 제공

 

Stringbuffer() // 16 크기 버퍼
StringBuffer(int length) // 지정 크기 버퍼
StringBuffer(String str) // 지정 문자열 + 16
StringBuffer append(매개변수) // 문자열로 변환하여 끝에 추가
int capacity() // 버퍼 크기
char charAt(int index)
StringBuffer delete(int start, int end) // 시작과 끝 사이 문자 제거
StringBuffer deleteCharAt(int index)
StringBuffer insert(int pos, 매개변수)
int length() // 문자열 길이
StringBuffer replace(int start, int end, String str)
StringBuffer reverse()
void setcharAt(int index, char ch)
void setLength(int newLength) // 문자열 길이 변경
String toString()
String substring(int start) // ~끝까지 뽑아서 String으로 반환
String substring(int start, int end)

 

 

6. StringBuilder

- StringBuffer는 동기화-멀티쓰레드에 안전 → 멀티쓰레드 프로그램 아닌 경우 동기화 성능저하

- StringBuffer와 똑같은 기능에서 동기화만 뺌

- StringBuffer → StringBuilde: 참조변수 선언 부분, 생성자만 변경

 

StringBuilder sb;
sb = new stringBuilder();
sb.append("abc");