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 = 5char 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의 성능을 떨어뜨리지만 충분히 성능이 좋기 때문에 성능향상이 반드시 필요할 때 말고는 굳이 쓸 필요는 없다 )