-
[ch9 JAVA] StringBuffer 클래스의 생성자와 메서드 알아보기프로그래밍 언어/JAVA 2022. 8. 4. 13:14
StringBuffer 클래스란?
String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer 클래스는 변경이 가능하다. 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며 StringBuffer 인스턴스를 생성할 때 그 크기를 지정할 수 있다.
이 때, 편집할 문자열의 길이를 고려해 버퍼의 길이를 충분히 잡아주는 것이 좋다. StringBuffer 클래스는 String 클래스와 유사하게 문자열을 저장하기 위한 char형 배열의 참조변수를 인스턴스변수로 선언해 놓고 있다.
아래는 StringBuffer를 공부하기 전 알아야될 String의 특징을 정리해뒀다.
https://wonisdaily.tistory.com/38
StringBuffer의 생성자
StringBuffer클래스의 인스턴스를 생성할 때, 적절한 길이의 char형 배열이 생성되고, 이 배열은 문자열을 저장하고 편집하기 위한 공간(buffer)으로 사용된다. StringBuffer인스턴스를 생성할 때는 생성자 StringBuffer(int length)를 사용해서 StringBuffer 인스턴스에 저장될 문자열의 길이를 고려하여 충분히 여유있는 크기로 지정하는게 좋다.
★ 버퍼의 크기를 지정해주지 않으면 16개의 문자를 저장할 수 있는 크기의 버퍼를 새성한다.
public StringBuffer(int length){
value = new char[length];
shared = false;
}
public StringBuffer(){
this(16); // 버퍼의 크기를 지정하지 않으면 버퍼의 크기는 16이 된다.
}
public StringBuffer(String str){
this(str.length() + 16 ) ; //지정한 문자열의 길이보다 16이 더 크게 버퍼를 생성한다.
append(str);
}StringBuffer의 변경
String과 달리 StringBuffer는 내용을 변경할 수 있다.
StringBuffer sb = new StringBuffer("abc");
그리고 sb에 문자열 "123"을 추가하면 ,
sb.append("123");
만약 String의 경우 sb = sb+"123" 상수 저장소(constant pool)에 새로운 문자열 "abc123"이 담긴 인스턴스가 생성되는 것이지만! StringBuffer의 경우 내용을 변경할 수 있다는 것을 알 수 있다.
StringBuffer sb2 = sb.append("ZZ"); // sb의 내용 뒤에 "ZZ"를 추가한다.
System.out.pringln(sb); //abc123ZZ
System.out.pringln(sb2); //abc123ZZappend()는 반환타입이 StringBuffer인데 자신의 주소를 반환하다. 그래서 위의 "ZZ"을 더하는 문장이 수행되면, sb에 새로운 문자열이 추가되고 sb 자신의 주소를 반환하여 sb2에는 sb의 주소인 0x100이 저장된다.
StringBuffer의 비교
String 인스턴스간의 비교에 대해서 알아보면서 등가비교연산자 ' == ' 에 의한 비교와 equals 메서드에 의한 비교 차이점을 알아봤다. String 클래스는 equals 메서드를 오버라이딩해서 문자열의 내용을 비교하도록 구현되었지만 StringBuffer 클래스는 equals 메서드를 오버라이딩 하지 않아서 equals를 사용해도 등가비교연산자(==)로 비교한 것과 같은 결과를 얻는다.!
반면에 toString()은 오버라이딩 되어있어 StringBuffer 인스턴스에 toString()을 호출하면, 담고있는 문자열 String으로 반환한다.
<예제 1번>
package ch9; public class Ex9_11 { 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)); } }
반응형'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[ch11 JAVA ] Comparator와 Comparable 비교, 배열 정렬하기 (0) 2022.08.05 [ch11 컬렉션 프레임웍] HashSet & HashMap의 메서드 및 사용법 (0) 2022.08.04 [ch9 JAVA] String 클래스 생성자 & String, new String() 차이 (0) 2022.08.04 [ch11 컬렉션 프레임웍] Arrays의 중요 메서드 (복사, 정렬, 비교..) (0) 2022.08.03 [ch11 컬렉션 프레임웍] Iterator & Enumeration 와 Map (0) 2022.08.03