String
String은 불변성(Imutable)을 가진 객체로 + 연산자를 통해 문자열을 생성하는 경우, 새로운 문자열을 반환한다.
String greet = "Hello";
System.out.println(greet.hashCode());
greet += " World";
System.out.println(greet.hashCode());
69609650
-862545276
+ 연산 후 주소값이 달라짐. 즉, 가리키는 문자열이 달라짐
StringBuilder & StringBuffer
StringBuilder와 StringBuffer는 String에 문자열을 추가하면 새로운 객체를 반환하는 단점을 보완하여 만들어진 클래스이다.
StringBuilder와 StringBuffer는 버퍼(Buffer)에 데이터를 임시로 저장하고 있고,
toString() 메소드를 통해 만들어진 전체 문자열을 반환한다. 그래서, 둘 다 추가/수정/삭제에 용이하다는 장점이 있다.
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
// 전체 문자열 출력
System.out.println(sb.toString()); // Hello World
// 문자열 삽입
sb.insert(11, "!");
System.out.println(sb.toString()); // Hello World!
// 문자열 교체
sb.replace(6, 11, "Java");
System.out.println(sb.toString()); // Hello Java!
// 문자열 삭제
sb.delete(5, 10);
System.out.println(sb.toString()); // Hello!
Hello World
Hello World!
Hello Java!
Hello!
- StringBuilder나 StringBuffer나 사용방법은 동일하다
StringBuilder와 StringBuffer의 차이점
StringBuilder는 동기화를 지원하지 않기 때문에, 단일 스레드 환경에서 사용StringBuffer는 동기화를 지원하기 때문에, 멀티 스레드 환경에서 사용
성능으로 봤을때는 StringBuilder가 2배가량 좋기 때문에, 단일 스레드 환경이라면 StringBuilder를 사용하는 것이 좋다.
삽입 성능 비교

관련 글
2021/03/07 - [Language/JAVA] - Java - String Pool에 대해서
Java - String Pool에 대해서
String Pool String을 이용하여 문자열을 생성하는 방법은 2가지가 있다. 문자열 리터럴을 이용하여 생성 new 연산자를 통해 String 객체를 생성하는 방법 위 2개 방법 모두 Heap 영역에 데이터가 저장
memostack.tistory.com
'Language > JAVA' 카테고리의 다른 글
| Java - equals()와 hashCode()의 관계 (0) | 2021.03.07 |
|---|---|
| Java - String Pool에 대해서 (0) | 2021.03.07 |
| JVM GC 동작 순서와 GC 종류(Serial / Parallel / CMS / G1 GC ) (0) | 2021.03.07 |
| JVM GC(Garbage Collector) 구조 (0) | 2021.03.07 |
| JVM 메모리 (Runtime Data Area) (0) | 2021.03.07 |