본문 바로가기

언어공부/Java

자바 StringBuffer 클래스, StringBuffer 클래스의 메소드

자바 StringBuffer 클래스에 대해서 알아보자.

StringBuffer클래스

String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능하다. 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있다. 

 

append()로 매개변수에 입력된 값을 문자열로 변환하여 StringBuffer인스턴스가 저장하고 있는 문자열 뒤에 덧붙인다. 

public class StringBuffer01 {

public static void main(String[] args) {
      StringBuffer sb=new StringBuffer("XX");
      sb.append("YY");//sb의 내용 뒤에 "YY"추가
      StringBuffer sb2=sb.append("ZZ");
      //sb의 내용 뒤에 "ZZ"추가
      System.out.println(sb);//XXYYZZ
      System.out.println(sb2);//XXYYZZ

      StringBuffer sb3=new StringBuffer("XX");
      sb3.append("YY").append("ZZ");//연속적으로 append()호출
      System.out.println(sb3);//XXYYZZ
  }
}

append()는 반환타입이 StringBuffer인데 자신의 주소를 반환한다.  그래서 sb에 새로운 문자열이 추가되고 sb자신의 주소를 반환하여 sb2에는 sb의 주소가 저장된다.

 

sb와 sb2 모두가 같은 StringBuffer인스턴스를 가리키고 있으므로 같은 내용이 출력된다. 그래서 하나의 StringBuffer인스턴스에 대해 연속적으로 append()를 호출하는 것이 가능하다. 코드에서 sb3.append("YY")가 sb3이므로 여기에 다시 append()를 호출할 수 있는 것이다. 자신의 주소를 반환하는 타입이기 때문에 가능한 일이다.

 

StringBuffer의 equals메소드 비교

 

String클래스에서는 equals메소드를 오버라이딩해서 문자열의 내용을 비교하도록 구현되어 있지만, StringBuffer클래스는 equals메소드를 오버라이딩하지 않아서 StringBuffer클래스의 equals메소드를 사용하면 Object클래스의 equals메소드로 등가비교연산자(==)로 비교한 것과 같은 결과를 얻는다.

 

반면에 toString()은 오버라이딩 되어 있어서 StringBuffer인스턴스에 toString()을 호출하면, 담고있는 문자열을 String으로 반환한다. 그래서 StringBuffer인스턴스에 담긴 문자열을 비교하기 위해서는 StringBuffer인스턴스에 toString()을 호출해서 String인스턴스를 얻은 다음, String클래스의 equals메소드를 사용해서 비교해야 한다.

 

ex)

출력화면

 


StringBuffer클래스의 다양한 메소드

String클래스와 같이 StringBuffer클래스에도 다양한 메소드가 있다. 하지만 겹치는 부분이 많다.

 

출력화면