출처 - 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");
'Java' 카테고리의 다른 글
날짜와 시간 (0) | 2022.10.25 |
---|---|
Object클래스 - Math클래스, 래퍼 클래스, Number클래스, 오토박싱, 은박인 (0) | 2022.10.12 |
Object클래스(equal, hashCode, toString, String클래스, join) (0) | 2022.10.11 |
예외처리 (1) | 2022.10.05 |
내부 클래스(inner class), 익명 클래스(anonymous class) (0) | 2022.10.04 |