String
String은 절대 변경이 불가능한 데이터 타입이기 때문에 연산을 할 때 새로운 문자열을 만든다.
- String의 내부 구조는 final char[] 변경되지 않는 문자 배열이기 때문
새로 만들어진 문자열은 참조형이기 때문에 주소 값은 stack에 객체는 호출 되기 전까지 heap 영역에 쌓이게 된다.
다량의 문자열이 만들어진다면 heap 영역에 string 객체가 계속 쌓이게 되기 때문에 이는 메모리 관리에 좋지 않다.
https://novemberde.github.io/2017/04/15/String_0.html
정리가 무지 잘되어 있어서 방문해보시길
위 블로그 개발자님이 좋은 글을 써주셔서 직접 코드를 돌려봤다.
String으로 선언한 변수를 더하는 연산을 했더니 새로운 문자열을 생성한 걸 볼 수 있다.
그에 반해 StringBuilder는 문자열을 추가해줘도 동일한 문자임을 알 수 있다.
StringBuffer vs StringBuilder
StringBuilder와 StringBuffer의 큰 차이는 동기화 지원 유무이다.
StringBuffer는 동기화를 지원하기 때문에 멀티쓰레드 환경에서 안전하다. (thread-safe)
StringBuffer는 동기화를 지원하지 않기 때문에 멀티쓰레드 환경에서는 쓰기 적합하지 않지만
동기화를 신경쓰지 않기 때문에 단일 쓰레드 환경에서 성능이 훨씬 뛰어나다.
멀티쓰레드를 돌린 결과 Buffer는 동일한 크기를 보여주지만 Builer의 크기는 계속 달라지는 걸 볼 수 있다.
'Java > 자바' 카테고리의 다른 글
StringTokenizer vs String.split() (0) | 2021.08.26 |
---|---|
캐릭터 인코딩 (0) | 2021.08.08 |
String 클래스 (0) | 2021.08.04 |
MVC (0) | 2021.04.11 |
String (0) | 2021.02.25 |