/ JAVAJUNGSUK

Ch9-15~18. StringBuffer

자바의 정석 기초편

0. 목차



Chapter9. java.lang 패키지와 유용한 클래스

Ch9 - 15. StringBuffer 클래스

Ch9 - 16. StringBuffer의 생성자

Ch9 - 17. StringBuffer의 변경

Ch9 - 18. StringBuffer의 비교



Ch9 - 15. StringBuffer 클래스


▶ StringBuffer 클래스란?

▷ 문자열을 저장하고 다루기 위한 클래스
▷ String처럼 문자형(char[])을 내부적으로 가짐
  • StringBuffer code
      public final class StringBuffer implements java.io.Serializable {
          private char[] value;
              ...
      }
    
▷ String : 내용 변경 불가 ↔ StringBuffer : 내용 변경 가능




Ch9 - 16. StringBuffer의 생성자


▶ StringBuffer의 생성자란?

▷ 배열은 길이 변경 불가
▷ 그래서 공간 부족 시, 배열을 새로 생성해야 함
▷ 새로운 배열을 생성하면?
  • 배열 생성
  • 기존 배열의 내용 복사
  • 참조 주소 변경
    결국 성능 저하
▷ StringBuffer는 저장 할 문자열의 길이를 고려하여 적절한 크기로 생성
public StringBuffer(int length) { // length : 적잘한 크기
    value = new char[length];
    shared = false;
}
▷ StringBuffer의 크기를 지정하지 않으면, 크기는 자동 16이 됨
public StringBuffer() {
    this(16);
}
▷ 지정한 문자열의 길이보다 16이 더 크게 버퍼를 생성
public StringBuffer() {
    this(str.length() + 16); // str = "abc" 즉 length = 3, 3 + 16짜리가 만들어짐
    append(str)
}



Ch9 - 17. StringBuffer의 변경


▶ StringBuffer의 변경이란?

▷ StringBuffer는 String과 달리 내용 변경이 가능
  • StringBuffer가 가진 메서드…
    • append() : 추가
    • delete() : 삭제
    • insert() : 삽입

      메서드의 반환 타입 : StringBuffer

▷ StringBuffer의 메서드는 내용 수행 후, StringBuffer의 참조를 반환





Ch9 - 18. StringBuffer의 비교


▶ StringBuffer의 비교란?

▷ StringBuffer는 equals()가 오버라이딩 되어있지 않음
  • StringBuffer : 주소 비교
▷ String은 equals()가 오버라이딩 되어있음
  • String : 내용 비교
▷ StringBuffer를 String으로 변환 후 equals()로 비교 : 내용 비교
String s = sb.toString();
String s1 = sb2.toString();

System.out.println(s.equals(s1));

// console
true