Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

StringBuffer 클래스 본문

Java/JAVA2

StringBuffer 클래스

빌드이너프 2023. 6. 27. 12:22

StringBuffer 클래스

문자열을 저장하고 다루기 위한 클래스

String처럼 문자열 배열(char[])을 내부적으로 가지고 있다

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

 

그러나, StringBuffer은 String(불변[immutable])과 달리 내용을 변경할 수 있다(가변[mutable])

char[]이 만들어짐, 123을 추가할 경우 그림처럼되는데 이는, 내용이 변경가능하다는 것이다

 

정리

문자열을 다룰 땐 기본적으로 String 클래스를 사용하지만,

문자열로 조작(추가, 변경, ...)을 많이할 경우엔 StringBuffer 클래스를 사용하는 것이 좋다

 

 

StringBuffer의 생성자

배열은 길이 변경불가

1번: 공간이 부족하면 새로운 배열을 생성해야 한다(보통 2배로 만든다)

 

2번: 내용 복사

 

3번: 참조변경

 

StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야한다

(배열의 저장공간이 부족하면, 배열을 새로 만들고 복사하고 참조변경을 해야한다 => 반복되면 성능 떨어짐)

 

 

StringBuffer는 String과 달리 내용 변경이 가능하다

append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환한다

StringBuffer sb = new StringBuffer("abc");
sb.append("123"); // sb의 내용 뒤에 "123"을 추가한다

StringBuffer sb2 = sb.append("ZZ"); // sb의 내용 뒤에 "ZZ"를 추가한다
System.out.println(sb); // abc123ZZ
System.out.println(sb2); // abc123ZZ

 

StringBuffer은 equals()가 오버라이딩되어 있지 않다(주소비교를 한다, this == obj)

[String은 equals()가 오버라이딩 되어 있다]

내용이 같아도 equals의 결과가 false이다

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

System.out.println(sb==sb2); // 주소비교: false
System.out.println(sb.equals(sb2)); // false

 

StringBuffer의 비교는 StringBuffer을 String으로 변환 후에 equals()로 비교해야한다

String s = sb.toString(); // sb를 String로 변환
String s2 = sb2.toString();

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