공통점
new 연산으로 클래스를 한 번만 만듦
문자열 연산 시 새로 객체를 만들지 않고 크기를 변경함
메서드가 동일
가변성을 가짐
코드
String str = "strA"; StringBuilder sbd = new StringBuilder(); StringBuffer sbf = new StringBuffer(); sbd.append("sbdA"); sbf.append("sbfA"); System.out.println("String 객체의 주소 : "+str.hashCode()); System.out.println("StringBuilder 객체의 주소 : "+sbd.hashCode()); System.out.println("StringBuffer 객체의 주소 : "+sbf.hashCode()); str += "strB"; sbd.append("sbdB"); sbf.append("sbfB"); System.out.println("============================="); System.out.println("String 객체의 주소 : "+str.hashCode()); System.out.println("StringBuilder 객체의 주소 : "+sbd.hashCode()); System.out.println("StringBuffer 객체의 주소 : "+sbf.hashCode()); //String 객체의 주소 : 3541040 //StringBuilder 객체의 주소 : 1468177767 //StringBuffer 객체의 주소 : 434091818 //============================= //String 객체의 주소 : 1758230625 //StringBuilder 객체의 주소 : 1468177767 //StringBuffer 객체의 주소 : 434091818
차이점
- StringBuffer는 Thread-Safe함
- StringBuilder는 Thread-safe하지 않음 (불가능)
StringBuffer 클래스
- 문자열 연산이 많은 Multi-Thread 환경
- 멀티 스레드 환경에서의 동기화를 지원하지만 이런 구현은 로직을 의심해야 함
- 속도 느림
StringBuilder 클래스
- 문자열 연산이 많은 Single-Thread 또는 Thread 신경 안쓰는 환경
- 동기화를 지원하지 않아 싱글 스레드에서 속도가 빠릅니다.
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] Integer (0) | 2024.10.17 |
---|---|
[JAVA] 직렬화 & 역직렬화 (0) | 2024.06.12 |
[JAVA] 정적 & 동적 (1) | 2023.10.20 |
[JAVA] 디자인패턴 (1) | 2023.10.20 |
[JAVA] 절차 지향 프로그래밍 (0) | 2023.10.20 |