String

String a = "sun";
String b = new String("ny");

String a = a + b; // 객체가 하나 더 생김

System.out.println(a); // sunny



StringBuilder

StringBuilder sb = new StringBuilder();
sb.append("sun"); // 객체가 수정됨
sb.append("ny");

System.out.println(sb.toString()); // sunny

sb.delete(0, sb.length()); // 객체 초기화1
sb.setLength(0); // 객체 초기화2



StringBuffer

StringBuffer sb = new StringBuffer();

sb.append("sun"); // 수정
sb.append("ny"); 

System.out.println(sb.toString());

sb.delete(0, sb.length()); // 객체 초기화1
sb.setLength(0); // 객체 초기화2



String vs StringBuilder vs StringBuffer

  String StringBuilder StringBuffer
객체 불변객체
(수정시 객체가 새로 생성)
변경 가능 변경 가능
쓰레드   단일 쓰레드 멀티 쓰레드
성능   StringBuffer보다 ↑ StringBuilder보다 ↓
추천순위 3 1 2
  • 문자열 연산이 기하급수적으로 많고 단일 쓰레드인 경우 : StringBuilder 추천

  • 문자열 연산이 많지만 단일 쓰레드인지 확실하지 않은 경우 : StringBuffer 추천

  • 문자열 연산이 많지 않고 테스트 코드 등으로 사용하는 경우 : 무관

  • java 1.5부터는 String + 연산도 StringBuilder로 구현되어 있음

    • 하지만 String 클래스의 객체 생성부분이 동일하기 때문에 StringBuilder 권장