자바의 정석 - StringBuffer클래스

Yohan·2024년 2월 5일
0

StringBuffer클래스

  • String처럼 문자형 배열(char[ ])을 내부적으로 가지고 있다.
  • 그러나 String과 달리 내용을 변경할 수 있다.(mutable)
StringBuffer sb = new StringBuffer("abc");

sb.append("123"); // sb의 내용 뒤에 "123"을 추가한다. -> 내용 변경
  • 배열은 길이 변경불가, 공간이 부족하면 새로운 배열 생성 -> 내용복사 -> 참조변경
  • StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성
public StringBuffer(int length) { // length -> 적절한 크기!
	value = new char[length];
    shared = false;
}

public StringBuffer() {
	this(16); // 버퍼의 크기를 지정하지 않으면 16이 됨.
}

public StringBuffer(String str) {
	this(str.length() + 16); // 지정한 문자열의 길이보다 16 크게 버퍼 생성
    append(str);
}

StringBuffer의 변경

  • append() : 끝에 문자열 추가
  • delete() : 삭제
  • insert() : 삽입
  • 위 메서드들은 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환 -> 이어서 사용 가능
StringBuffer sb = new StringBuffer("abc");

sb.append("123");
sb.append("zz");

// StringBuffer의 참조를 반환함으로써 위 코드를 아래처럼 쓸 수 있음

StringBuffer sb = new StringBuffer("abc");

sb.append("123").append("zz");

StringBuffer의 비교

  • StringBuffer는 equals()가 오버라이딩되어있지 않다. (주소비교)
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");

System.out.println(sb==sb2); // false
System.out.println(sb.equals(sb2)); // false
  • StringBuffer를 String으로 변환 후에 equals()로 비교해야 한다.
String s = sb.toString(); // sb를 String으로 변환
String s2 = sb2.toString();

System.out.println(s.equals(s2)); // true
profile
백엔드 개발자

0개의 댓글