코딩테스트 문제를 풀던 중
Stirng "+="연산자 사용과 StringBuilder사용의 성능차이가 발생하는걸 확인하여 그에 대해 학습
구분 | Stirng | StringBuffer | StringBuilder |
가변 여부 | 불변 | 가변 | 가변 |
스레드 세이프 | O | O | X |
연산속도 | 느림 | 중간 | 빠름 |
※ 스레드 세이프란 (thread-safe) ?
멀티 스레드 환경에서 프로그램이나 코드가 여러 스레드에 의해 동시에 실행될 때,
예상치 못한 결과나 오류 없이 정확하게 실행되는 것을 스레드 세이프(thread-safe)라고 합니다.
◇ String
// 스트링 리터럴로 스트링 객체 생성
String str1 = "Hello";
String str2 = "Hello";
// String 클래스의 생성자를 이용해서 스트링 객체 생성
Stirng str3 = new String("Hello");
str1 == str2 // true
str1 == str3 // flase
- 리터럴 방식 : 리터럴 방식은 heap 내부 String Constatn Pool을 먼저 조회해 없으면 생성하고 있다면 주소값을 참조함
- 생성자 방식 : 매번 새로운 객체를 생성해 heap에 저장
- 연산자 사용 시 새로운 객체가 생성되어 비효율적
◇ StringBuffer, StringBuilder
StringBuffer과 StringBuilder는 메모리 공간을 미리 확보해두기 때문에 문자 가변시 String보다 효율적이다.
※ 차이점
- Stirng은 가변 시 항상 새로운 객체가 생성됨
- StringBuffer과 StringBuilder은 처음에 일부 메모리 공간을 할당하여 가변시에도 새로운 객체가 계속 생성되지않음
'Java & Spring > Java' 카테고리의 다른 글
enhanced switch()문 (0) | 2024.07.24 |
---|---|
7일차 - Java강의(연산자, 조건문, 반복문, 배열, 컬렉션) (0) | 2024.07.23 |
Scanner클래스 next()메서드 개행문자 처리 (0) | 2024.07.22 |
6일차 - Java강의(변수, 형변환) (0) | 2024.07.22 |
Map 기본 문법 및 사용법 (0) | 2024.07.22 |