StringBuffer 클래스
- 문자열을 저장하고, 다루기 위한 클래스
- String처럼 문자형 배열(char[])을 내부적으로 가지고 있음.
public final class StringBuffer implements java.io.Serializable {
private char[] value;
...
}
- 그러나, String과 달리 내용을 변경할 수 있다. (mutable)
StringBuffer sb = new StringBuffer("abc");
sb.append("123"); // sb의 내용 뒤에 "123" 을 추가한다. (내용 변경 가능)
StringBuffer 의 생성자
배열은 길이 변경 불가. 공간이 부족하면 새로운 배열 생성해야함.
StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야함.
public StringBuffer(int length) {
value = new char[length];
shard = false;
}
public StringBuffer() {
this(16); // 버퍼의 크기를 지정하지 않으면 버퍼의 크기는 16이 된다.
}
public StringBuffer(String str) {
this(str.length() + 16);
append(str); // 지정한 문자열의 길이보다 16이 더 크게 버퍼를 생성한다.
}
StringBuffer는 String과 달리 내용 변경이 가능
append() 는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환
// 1)과 2)는 같은 값
// 1)
StringBuffer sb = new StringBuffer("abc");
sb.append("123");
ab.append("zz");
// 2)
StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("zz");
StringBuffer는 equals()가 오버라이딩 되어 있지 않다. (주소비교) this = obj
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
