StringBuffer vs StringBuilder (Feat. Constant Pool)
1. Constant Pool
자바는 문자열들을 constant pool을 통해 관리한다
자바는 문자열들을 constant pool을 통해 관리한다
- 따라서 다음과 같은 코드는 CP에 "0", "01", ... "012345" 같은 별개의 문자열을 생성한다
String a = "";
for (int i = 0; i <= 5; i++) {
a += i
}
- CP를 사용해 이미 존재하는 문자열의 경우 그대로 사용하기 때문에 다음과 같은 결과도 나온다
String a = "Hello";
String b = "Hello";
System.out.println(a == b); // true, 레퍼런스의 비교
- 따라서 여러 문자열을 합칠때 더하기 연산을 사용하지 말고, StringBuffer나 StringBuilder 같은 클래스를 사용해서 버퍼에 추가하고 이후 문자열을 생성하도록 해야한다
StringBuffer vs StringBuilder
두 클래스의 기본 사용법은 같다
StringBuffer sb = new StringBuffer();
for (int i = 0; i <= 5; i++) {
sb.append(i)
}
System.out.println(sb);
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 5; i++) {
sb.append(i);
}
System.out.println(sb);
-
두 클래스 모두 문자열을 constant pool에 바로 생성하지 않고 버퍼에 우선 합치게하는 기능을 한다
-
둘의 가장 큰 차이점은 StringBuffer는 thread-safe한 반면 StringBuilder는 그렇지 못하다는 것이다
-
StringBuffer : 동기화되어 있어 여러 프로세스/스레드에서 접근해도 안전하다
-
StringBuilder : 동기화되지 않아 속도가 StringBuffer보다 더 빠르다
-
동기화가 필요하다면 StringBuffer, 필요 없다면 StringBuilder를 사용하면된다
StringBuffer/StringBuilder는 언제 문자열을 생성할까?
-
자연스럽게, 그렇다면 도대체 문자열(즉 CP에 들어가는 데이터)는 언제 생성되는지 궁금해졌다
-
위 클래스들은 사용하는 것으로는 전혀 문자열을 생성하지 않는다
-
StringBuffer/StringBuilder 클래스에 내장된 toString() 메소드를 호출할 때 비로소 문자열이 생성된다
출처
두 클래스의 기본 사용법은 같다
StringBuffer sb = new StringBuffer();
for (int i = 0; i <= 5; i++) {
sb.append(i)
}
System.out.println(sb);
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 5; i++) {
sb.append(i);
}
System.out.println(sb);
두 클래스 모두 문자열을 constant pool에 바로 생성하지 않고 버퍼에 우선 합치게하는 기능을 한다
둘의 가장 큰 차이점은 StringBuffer는 thread-safe한 반면 StringBuilder는 그렇지 못하다는 것이다
-
StringBuffer : 동기화되어 있어 여러 프로세스/스레드에서 접근해도 안전하다
-
StringBuilder : 동기화되지 않아 속도가 StringBuffer보다 더 빠르다
-
동기화가 필요하다면 StringBuffer, 필요 없다면 StringBuilder를 사용하면된다
-
자연스럽게, 그렇다면 도대체 문자열(즉 CP에 들어가는 데이터)는 언제 생성되는지 궁금해졌다
-
위 클래스들은 사용하는 것으로는 전혀 문자열을 생성하지 않는다
-
StringBuffer/StringBuilder 클래스에 내장된 toString() 메소드를 호출할 때 비로소 문자열이 생성된다
출처
Difference between StringBuilder and StringBuffer : https://stackoverflow.com/questions/355089/difference-between-stringbuilder-and-stringbuffer
When does StringBuffer adds strings to the String Pool? : https://stackoverflow.com/questions/15746018/when-does-stringbuffer-adds-strings-to-the-string-pool
Author And Source
이 문제에 관하여(StringBuffer vs StringBuilder (Feat. Constant Pool)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sangmin7648/StringBuffer-vs-StringBuilder-Feat.-Constant-Pool저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)