티스토리 뷰
반응형
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의 차이점은 무엇입니까?
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ApplicationContext
- 자바8
- NPM
- 중간연산
- install
- Intellij
- AnnotationConfigApplicationContext
- JPA
- lambda
- webpack
- 람다
- springboot
- 차이
- java
- 영속성 컨텍스트
- 최종연산
- mvn
- map
- Vuex
- Vue
- nginx
- stream
- ngnix
- 스트림
- BeanFactory
- docker
- container
- vscode
- elasticsearch
- MAC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함