반응형
StringBuffer란?
- String처럼 문자열 배열(char[])을 내부적으로 가지고 있다
- 그러나 String과 달리 내용을 변경할 수 있다.(mutable)
public final class StringBuffer implements java.io.Serializable {
private char[] value;
...
}
- 편집할 문자열의 길이를 고려하여 버퍼의 길이를 충분히 잡아주는 것이 좋다.
- 편집 중인 문자열이 버퍼의 길이를 넘어서게 되면 버퍼의 길이를 늘려주는 작업이 추가로 수행되어야하기 때문에 작업효율이 떨어진다.
StringBuffer의 생성자
- 배열의 길이 변경불가. 공간이 부족하면 새로운 배열 생성해야한다
- StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야한다.
public StringBuffer(int length) {
value = new char[length];
shared = false;
}
public StringBuffer(){
this(16); //버퍼의 크기를 지정하지 않으면 버퍼의 크기는 16이 된다.
}
public StringBuffer(String str){
this(str.length() + 16); //지정한 문자열의 길이보다 16이 더 크게 버퍼를 생성한다.
}
StringBuffer의 변경
- StringBuffer는 String과 달리 내용 변경이 가능하다.
StringBuffer sb = new StringBuffer("abc");
sb.append("123"); //sb의 내용 뒤에 "123"을 추가한다.
- append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환
StringBuffer sb2 = sb.append("ZZ"); //sb의 내용뒤에 "ZZ"를 추가한다.
System.out.println(sb); //abc123ZZ
System.out.println(sb2); //abc123ZZ
StringBuffer의 비교
- StringBuffer는 equals()가 오버라이딩되어있지 않다.(주소비교)
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 =new StringBuffer("abc");
System.out.println(sb==sb2); //false
System.out.println(sb.equals(sb2)); //fasle
- StringBuffer을 String으로 변환 후에 equals()로 배교해야 한다.
String s = sb.toString(); //sb를 String으로 변환
String s2 = sb2.toString();
System.out.println(s.equals(s2)); //true
public class StringBufferEx1 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer ("abc");
StringBuffer sb2 = new StringBuffer ("abc");
System.out.println ("sb == sb2 ? " + (sb == sb2));
System.out.println ("sb.equals(sb2) ? " + (sb.equals ( sb2 )));
// StringBuffer의 내용을 String으로 변환한다.
String s = sb.toString(); //String s = new String(sb); 와 같다
String s2 =sb2.toString();
System.out.println ("s.equals(s2) ? " + s.equals ( s2 ));
}
}
StringBuilder
- StringBuffer는 동기화되어 있다. 멀티 쓰레드에 안전(thread-safe)
- 멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하이럴 땐 StringBuffer대신 StringBuilder를 사용하면성능 향상된다.
참고자료
자바의 정석
'Language > Java' 카테고리의 다른 글
직렬화 역직렬화 (0) | 2021.11.01 |
---|---|
List, Set, Map (0) | 2021.10.10 |
java.lang패키지와 유용한 클래스 (0) | 2021.10.03 |
예외 처리 (0) | 2021.09.27 |
인터페이스 (0) | 2021.09.26 |