StringBuffer 클래스

coding by 스플릿·2022년 1월 5일

Java1

목록 보기
42/44

String클래스와는 다르게 문자열 변경이 가능하다.

  • 문자열 편집을 위한 버퍼를 가지고 있어 생성할 때 버퍼의 크기를 정해준다. 문자열이 버퍼의 길이를 넘길 경우 버퍼의 길이를 늘려주는 작업이 수행되어 효율이 떨어지니 처음에 넉넉히 잡아주는게 좋다 ( default는 16 )
public final class StringBuffer implements java.io.Serializable {
   private char [] value;
   ...
}
  • StringBuffer append(String str) 메서드 s: StringBuffer 문자열 에 str을 추가하고 그 주소를 반환한다.
public class Main{
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc");
        StringBuffer sb2 = sb.append("def");
        StringBuffer sb3 = new StringBuffer("abcdef");
        System.out.println(sb.hashCode());
        System.out.println(sb2.hashCode());
        System.out.println(sb3.hashCode());
    }
}
/* 출력 : 
356573597
356573597
1735600054
*/
  • 비교 ( equals를 오버라이딩 하지 않아서 false가 반환 됨 )
public class Main{
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc");
        StringBuffer sb2 = new StringBuffer("abc");
        System.out.print(sb == sb2);
        System.out.print(sb.equals(sb2));
    }
}
/* 출력 :
false false
 */

StringBuffer class 생성자 & 메서드

생성자 & 설명예제결과
StringBuffer()
16문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성
StringBuffer sb = new StringBuffer();sb=""
StringBuffer(int length)
length만큼의 문자를 담을 수 있는 StringBuffer 인스턴스 생성
StringBuffer sb = new StringBuffer(10);sb=""
StringBuffer(String str)
문자열 str을 담은 StringBuffer 인스턴스 생성
( 버퍼크기 : 16 + str.length() )
StringBuffer sb = new StringBuffer("Hello");sb="Hello"

메서드 & 설명예제결과
StringBuffer append()
매개변수를 문자열로 변환 후 StringBuffer
인스턴스 문자열 뒤에 추가하고 주소값을 반환
StringBuffer sb = new StringBuffer("Hello");
sb.append("Bye");
sb = "HelloBye"
int capacity()
StringBuffer 인스턴스의 버퍼크기를 알려준다
StringBuffer sb = new StringBuffer(100);
sb.append("Hello");
int i = sb.capacity(), i2 = sb.length;
i = 100
i2 = 5
char charAt(int index)String클래스와 동일
void setCharAt(int index, char ch)
index번째 문자를 주어진 문자로 바꾼다.
StringBuffer sb = new StringBuffer("Hello");
sb.setCharAt(1,'X');
sb = "HXllo"
StringBuffer delete(int start, int end)
start와 end 사이에 있는 문자를 제거한다.
StringBuffer sb = new StringBuffer("Hello");
sb.delete(1,3);
sb = "Hlo"
StringBuffer deleteCharAt(int index)
inde번째 문자를 제거한다.
StringBuffer sb = new StringBuffer("Hello");
sb.deleteCharAt(1);
sb = "Hllo"
StringBuffer insert(int index, ... )
index위치에 다음 매개변수값을 문자열로 추가
StringBuffer sb = new StringBuffer("Hello");
sb.insert(1,"e");
sb = "Heello"
StringBuffer replace(int s, int e, String s)
s부터 e까지의 범위를 s로 대체한다.
StringBuffer sb = new StringBuffer("Hello");
sb.replace(1,3,"XX");
sb "HXXlo"
StringBuffer reverse()
StringBuffer인스턴스에 저장된 문자열을
반대로 나열
StringBuffer sb = new StringBuffer("Hello");
sb.reverse()
sb = "olleH"
void setLength(int newLength)
주어진 길이만큼의 문자열로 변경한다.
StringBuffer sb = new StringBuffer("Hello")
sb.setLength(1)
StringBuffer sb2 = new StringBuffer("Hell")
sb2.setLength(8)
sb = "H"
sb2="Hell    "
String toString()String클래스와 동일
String substring(int start, int end)String클래스와 동일

StringBuilder

StringBuffer에서 쓰레드의 동기화만 뺀 클래스로 완전히 똑같은 기능으로 작성되어 있다.
( 동기화가 StringBuffer의 성능을 떨어뜨리지만 충분히 성능이 좋기 때문에 성능향상이 반드시 필요할 때 말고는 굳이 쓸 필요는 없다 )

0개의 댓글