개발자꿈나무

StringBuffer 클래스 본문

자바

StringBuffer 클래스

망재이 2023. 1. 25. 23:30
  • StringBuffer 클래스

- 내부적으로 문자열 편집을 위한 퍼버를 가지고 있으며 그 크기도 지정할 수 있다.

- 오라클에 들어가보면 좀 더 자세한 정보와 메소드들을 알려주고 있다.

- public final class StringBuffer implements java.io.Serializable {

 

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html

 

StringBuffer (Java SE 17 & JDK 17)

All Implemented Interfaces: Serializable, Appendable, CharSequence, Comparable A thread-safe, mutable sequence of characters. A string buffer is like a String, but can be modified. At any point in time it contains some particular sequence of characters, bu

docs.oracle.com

- 인스턴스를 생성할 때 적절한 길이의 char형 배열이 생성되고, 이 배열을 문자열을 저장하고 편집하기 위한 공간으로 사용된다. 문자열의 길이를 고려하여 충분히 여유있는 크기로 지정하는 것이 좋다.

//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의 메소드 중에 append()메소드는 자신의 주소를 반환한다.

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

//sb sb2 모두 같은 인스턴스를 가리키고 있으므로 연속적으로 append() 호출 가능
StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("ZZ");

- StringBuffer클래스는 equlas메서드를 오버라이딩하지 않아서 equals메소드를 사용해도 등가비교연산자로 비교한 것과 같은 결과를 얻지만, toString()은 오버라이딩 되어 있어서 호출하면 담고있는 문자열을 String으로 반환한다. 문자열을 비교하기 위해서는 toString()을 호출해서 String 인스턴스를 얻은 다음, equals메소드를 사용해서 비교해야 함.

public static void main(String[] args) 
	{
		StringBuffer sb = new StringBuffer("abc");
		StringBuffer sb2 = new StringBuffer("abc");
		
		System.out.println("sb == sb ? "+(sb == sb2)); // false
		System.out.println("sb.equals(sb2) ? "+sb.equals(sb2)); // false
		
		//StringBuffer의 내용을 String으로 변환한다.
		String s = sb.toString(); //String s = new String(sb);와 같다.
		String s2 = sb2.toString();
		
		System.out.println("s.equals(s2) ? "+s.equals(s2)); // true
		
	}

 

728x90