String
- 불변: 한 번 만들어진 메모리는 변하지 않음
- 조회 연산이 빠름
- 문자열 연산 시 힙 부족, 객체 생성 시 오버헤드 발생
리터럴로 생성
String st = "Hello";
✔ Heap 영역에 존재하는 String Pool이 객체에 메모리 할당
✔ String Pool은 Hash Table과 같은 역할
// st와 st2의 메모리는 같다.
// String Pool에서 Hello가 담긴 위치의 메모리를 가지기 때문
String st_hello = "Hello";
✔ + 연산 시, 새로운 메모리를 할당한다.
st += " Wolrd";
// st == "Hello World"
// 새로운 메모리에 Hello World가 적재된다.
> 기존 Hello는 더 이상 가리키는 메모리가 없으므로 GC 대상이된다.
객체 생성
String st1 = new String("Hello");
String st2 = new String("Hello");
✔ st1와 st2는 다른 메모리를 할당받는다. ( st1 != st2 != st)
✔ + 연산 시, 새로운 메모리를 할당했었지만, java 8 부터는 StringBuilder와 같은 연산을 하도록 내부적 구조가 바뀌었다.
StringBuilder / StringBuffer
- 가변: 메모리의 크기가 늘어날 수 있다.
- 연산이 빠르다.
- 객체 생성 속도가 느리다.
차이점
StringBuilder: 단일 쓰레드에서 빠르다. 동기화를 지원하지 않는다.
StringBuffer: 멀티 쓰레드 환경에서 안정적이다.
'IT > CS' 카테고리의 다른 글
[프로그래밍 언어] C++과 JAVA (0) | 2021.05.30 |
---|---|
[DB] 데이터베이스 기초 (0) | 2021.05.27 |
[자료구조] Hash (1) | 2021.04.16 |
[프레임워크] Spring Framework (0) | 2021.04.14 |
[Web] 쿠키/세션/캐시 (0) | 2021.04.13 |