728x90
String
1. 불변(immutable)
2. 문자열 추가, 수정, 삭제가 적을 경우 사용
3. 문자열 데이터 동등 비교시, equals() 사용
String s1 = "Hello"; // 문자열 리터럴을 이용한 방식
String s2 = new String("Hello"); // new 연산자를 이용한 방식
// 리터럴과 객체 문자열 비교
System.out.println(s1 == s2); // false
System.out.println(s2.equals(s1)); // true
StringBuffer / StringBuilder
1. 가변(mutable)
2. 문자열 추가, 수정, 삭제가 빈번할 경우 사용
3. 문자열 데이터 동등 비교시, String 객체로 변환 후, equals() 사용
StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("hello");
System.out.println(sb1 == sb2); // false
System.out.println(sb2.equals(sb1)); // false
String sb1 = sb1.toString();
String sb2 = sb2.toString();
System.out.println(sb_tmp.equals(sb2_tmp)); // true
StringBuffer는 각 메서드 별로 synchronized가 존재하여 멀티스레드 환경에서도 동기화를 지원한다.
하지만 StringBuilder는 동기화를 보장하지 않는다.
StringBuilder는 문자열 파싱 성능이 우수하다.
String | StringBuffer | StringBuilder | |
가변 여부 | 불변 | 가변 | 가변 |
스레드 세이프 | O | O | X |
연산 속도 | 느림 | 빠름 | 아주 빠름 |
사용 시점 | 문자열 추가 연산이 적고, 스레드 세이프 환경에서 |
문자열 추가 연산이 많고, 스레드 세이프 환경에서 |
문자열 추가 연산이 많고, 빠른 연산이 필요한 경우 단일 스레드 환경일 경우 |
참고
728x90
'JAVA' 카테고리의 다른 글
[JAVA] 인수(Argument), 매개변수(Parameter) (0) | 2024.09.27 |
---|---|
[JAVA] 시간 함수(년월일시) (0) | 2024.08.19 |