String vs StringBuilder vs StringBuffer

String vs StringBuilder vs StringBuffer

String vs StringBuffer vs StringBuilder

String

String은 내부의 문자열을 수정할 수 없다.

즉, String을 수정할 때마다 [힙]영역 참조되는 객체를 수정하는 것이 아닌

[힙]영역에 계속 객체가 생성되어 [스택]영역의 참조주소가 변한다.

이렇게 문자열을 수정할때마다 새로운 객체를 생성하는 String의 단점을 보완하고자 StringBuffer와 StringBuilder가 나왔다.

StringBuffer, StringBuilder

공통점

버퍼(buffer:데이터를 임시로 저장하는 메모리)에 문자열을 저장한다.

버퍼 내부에서 데이터를 추가/수정/삭제 작업을 진행하기때문에

String처럼 새로운 객체를 계속생성하지 않는다.

차이점

멀티 스레드 환경 : StringBuffer

단일 스레드 환경 : StringBuilder

StringBuffer StringBuilder Synchronized(thread-safe) Non-Synchronized(not-thread-safe) 여러 쓰레드에서 안전하게 엑세스할 수 있다.

한 번에 하나의 스레드만

StringBuffer 개체의 동기화된 코드에 액세스할 수 있도록

액세스를 제어하는 ​​동기화된 방법 Synchronized 방법이 포함되어있지 않다 속도 느림 빠름

StringBuffer.java

@Override public StringBuilder append(Object obj) { return append(String.valueOf(obj)); } @Override public StringBuilder append(String str) { super.append(str); return this; }

StringBuilder.java

@Override public synchronized StringBuffer append(Object obj) { toStringCache = null; super.append(String.valueOf(obj)); return this; } @Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }

사용법

StringBuilder를 StringBuffer로 수정해도됨

StringBuilder sb = new StrinbBuilder(); StringBuilder sb = new StrinbBuilder(16); StringBuilder sb = new StrinbBuilder("Java");

메소드 설명 append() 데이터 추가 insert (int offset, "삽입글자") 중간에 데이터 삽입

(삽입글자는 문자, 문자열, 숫자 등 모두 가능) delete(int start, int end) 삭제 deleteCharAt(int index) 몇번째 index 문자를 삭제 StringBuilder reverse() 문자열 순서 뒤집기 replace(int start, int end, String str) startIndex~endIndex 문자열 변경

(문자열 변경) setCharAt(int index, char ch) 주어진 index문자를 ch문자로 변경

(문자 변경)

참조

https://www.youtube.com/watch?v=0uHQDnYYXKw

이것이 자바다 - 11.9 StringBuffer, StringBuilder 클래스 https://www.youtube.com/watch?v=cgdGZZRnaJ0

IQ 7 : StringBuffer와 StringBuilder의 차이점은 무엇입니까?

from http://g-study.tistory.com/82 by ccl(S) rewrite - 2021-09-12 06:27:34