본문 바로가기
Language/java

java.lang 패키지(StringBuffer, StringBuilder 클래스)

by gamxong 2022. 7. 14.

 

public final class StringBuffer implements java.io.Serializable
{
    private char[] value;
    ...
}

 

StringBuffer의 생성자

 

: StringBuffer클래스의 인스턴스를 생성할 때, 적절한 길이의 char형 배열이 생성되고, 이 배열은 문자열을 저장하고 편집하기 위한 공간(buffer)으로 사용된다.

 

- StringBuffer인스턴스를 생성할 때는 생성자 StringBuffer(int length)를 사용해서 StringBuffer인스턴스에 저장될 문자열의 길이를 고려하여 여유있는 크기로 지정하는 것이 좋다.

 

- 크기 지정 X → 16개 문자 저장할 수 있는 버퍼 생성

 

- 배열의 길이는 변경될 수 없으므로 새로운 길이의 배열을 생성한 후에 이전 배열 값을 복사해야 함.

 

 

 

StringBuffer의 변경

 

★ String과 달리 StringBuffer는 내용을 변경할 수 있다.

 

- append() : 반환타입이 StringBuffer, 자신의 주소를 반환

 

StringBuffer sb = new String("abc");
sb.append("123");
sb.append("ZZ");

// same

StringBuffer sb = new String("abc");
sb.append("123").append("ZZ");  // {sb}.append("ZZ");

 

 

 

StringBuffer의 비교

 

- equals메서드를 오버라이딩 하지 않음 → equals메서드 사용시 등가비교연산자(==)와 같은 결과

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

System.out.println(sb==sb2);          // false
System.out.println(sb.equals(sb2));   // false

 

- toString()은 오버라이딩 됨 → toString() 호출 시, 담고 있는 문자열을 String으로 반환

String s = sb.toString();
String s2 = sb2.toString();

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

 

 

 

StringBuffer클래스의 생성자와 메서드

 

메서드 설명 예제 결과
StringBuffer() 16문자를 담을 수 있는 버퍼를 가진 StringBuffer인스턴스를 생성한다. StringBuffer sb = new StringBuffer(); sb = ""
StringBuffer(int length) 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer인스턴스를 생성한다. StringBuffer sb = new StringBuffer(10); sb = ""
StringBuffer(String str) 지정된 문자열 값을 갖는 StringBuffer 인스턴스를 생성한다. StringBuffer sb = new StringBuffer("Hi"); sb = "Hi"
int capacity() StringBuffer인스턴스의 버퍼크기를 알려준다. length()는 버퍼에 담긴 문자열의 길이를 알려준다. 생략 생략
StringBuffer delete(int start, int end) 시작위치부터 끝 위치 사이에 있는 문자를 제거한다. 끝 위치 문자는 제외. 생략 생략
StringBuffer replace(int start, int end, String str) 지정된 범위의 문자들을 주어진 문자열로 바꾼다. end위치의 문자는 범위에 포함 X  StringBuffer sb = new StringBuffer("0123456");
sb.replace(3,6,"AB");
sb = "012AB6"

 

 

 

StringBuilder 란?

 

: 멀티쓰레드에 안전하도록 동기화되어 있다.

: StringBuffer에서 쓰레드의 동기화만 뺀 것이므로 이름만 바꿔서 사용하면 된다.

 

 

 

댓글