충분히 쌓여가는
StringBuffer 클래스 본문
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
'Java > JAVA2' 카테고리의 다른 글
StringBuilder, Math 클래스 (0) | 2023.06.28 |
---|---|
StringBuffer 클래스의 메서드 (0) | 2023.06.28 |
StringJoiner, 문자열과 기본형 반환 (0) | 2023.06.26 |
String 클래스의 생성자와 메서드 (0) | 2023.06.26 |
String 클래스, 문자열 비교, 빈 문자열 (0) | 2023.06.26 |