// StringBuffer 생성
StringBuffer sb = new StringBuffer("abcd"); // sb : abcd
// StringBuffer 변경
sb.append("efgh"); // sb : abcdefgh
sb.append("ij").append("kl"); // sb : abcdefghijkl
// 같은 내용의 문자열을 가지는 두 StringBuffer 생성
StringBuffer sb1 = new StringBuffer("abcd");
StringBuffer sb2 = new StringBuffer("abcd");
System.out.println(sb1 == sb2); // false
System.out.println(sb1.equals(sb2)); // false
// toString()을 호출하여 String 인스턴스를 생성
String s1 = sb1.toString();
String s2 = sb2.toString();
System.out.println(s1.equals(s2)); // true
StringBuffer에서 쓰레드의 동기화만 뺀 StringBuilder가 새로 추가되었다. 즉, StringBuffer와 StringBuilder는 완전히 똑같은 기능으로 구현되어 있습니다.
따라서 멀티쓰레드 환경에서는 StringBuffer를 사용하고, 그렇지 않다면 StringBuilder를 사용하는 것이 좋습니다.
StringBuilder > StringBuffer >>> String
하지만 사용하는 환경에 따라 성능이 차이가 나기 때문에 다양한 고려 사항을 고민해서 선택해서 사용 해한다. 간단하게 정리하면 아래와 같다.
- 멀티 쓰레드 환경에서 하나의 문자열에 대하여 다른 문자나 문자열의 추가가 많이 발생할 경우 StringBuffer 클래스를 사용하는 게 유리하다.
- 멀티 쓰레드 환경에서 하나의 문자열에 대하여 다른 문자나 문자열의 추가가 많이 발생할 경우 StringBuilder 클래스를 사용하는 게 유리하다.
- String 클래스는 문자열의 + 연산 회수가 많지 않을 경우에 유리하다.