Java06 String, StringBuffer,StringBuilder

차차·2021년 7월 20일
0

Java

목록 보기
6/11

Java에는 문자열을 다루는 class로
String, StringBuffer, StringBuilder 가 있다.
각각은 모두 조금씩 차이가 있다.

String vs StringBuffer, StringBuilder

immutable (불변) vs mutable (가변)

String 객체는 한번 선언되면 할당된 공간이 변하지 않지만
StringBuffer나 StringBuilder의 경우 공간이 부족해지면 버퍼의 크기를 유동적으로 늘려준다 .

그래서 String은 대입해야 해당 변수의 값이 변한다.

StringBuffer vs StringBuilder

StringBuffer는 멀티쓰레드환경에서 synchronized키워드가 가능하므로 동기화가 가능하다. 즉, thread-safe하다.

반대로 StringBuilder는 동기화를 지원하지 않기 때문에 멀티 쓰레드 환경에서는 적합하지 않다. 즉, thread-safe하지 않다.

대신 StringBuilder가 동기화를 고려하지 않기 때문에 싱글쓰레드 환경에서 StringBuffer에 비해 연산처리가 빠른 장점이 있다.

이 두가지는 모두 String 보다 문자열 연산을 할 때 아주 효과적이라는 특징이 있다.
동기화를 고려하는 환경에서는 StringBuilder가 성능이 더 좋고,
동기화가 필요한 멀티쓰레드 환경에서는 StrignBuffer를 사용하는 것이 더 유리하다.

String의 비교 연산

String a = "abc" ; 

String b = "abc";    -> String pool 에 있는 하나의 값 "abc" (기본타입) 

String c = new String ("abc"); -> 새로운 객체를 만들어낸 "abc"  (참조타입)

1. 주소값을 비교하는 == 연산

System.out.println(a ==b) // true

System.out.println(a ==c) // false

2. 값을 비교하는 .equals()

System.out.println(a.equals(b)) // true

System.out.println(a.equals(c)) // true

즉 기본타입 ≠ 참조타입

참고: https://jeong-pro.tistory.com/85 [기본기를 쌓는 정아마추어 코딩블로그]

profile
개발하는 돌멩이🙄🙄👻

0개의 댓글