String 클래스
Q1. String str1 = new String("abc")와 String str2 = "test"의 차이점은 무엇인가?
A1. new String("abc")는 힙 메모리에 객체가 선언되고,
"test"는 상수 풀(constant pool)에 선언됩니다.
Q2. String 클래스는 어떤 char[]형 배열로 선언되어 있고,
그로 인해 생기는 결과는 무엇인가?
- String 클래스는 private final char[]형 배열로 선언되어 있습니다.
그로 인해 String 클래스는 불변(immutable) 클래스가 됩니다.
Q3. StringBuffer 클래스와 StringBuilder 클래스가 해결하는 문제는 무엇인가?
- String 클래스가 불변 클래스이기 때문에, 객체 끼리 값을 더할 때마다
메모리를 새로 할당해야 하고, 이로 인해 메모리 낭비가 발생합니다.
StringBuffer 클래스와 StringBuilder 클래스는 객체 끼리 값을 더할 때,
메모리를 새로 할당하지 않고 연산을 가능하게 합니다.
Q4. StringBuffer 클래스와 StringBuilder 클래스의 차이점은 무엇이고,
왜 그러한 차이가 발생하는가?
- StringBuffer 클래스는 스레드 안전하고, StringBuilder 클래스는 스레드 안전하지 않습니다.
따라서 여러 스레드가 접근한다면, StringBuffer 클래스를 사용하고,
좀 더 빠른 성능이 필요하다면, StringBuilder 클래스를 사용합니다.
이러한 차이가 발생하는 이유는 StringBuffer 클래스는 synchronized 키워드로 처리를 하였고,
StringBuilder 클래스는 처리를 하지 않았기 때문입니다.
참고
- Do it 자바 프로그래밍 입문(Q1~Q4)
- Q1~Q4 5.13
- A1~A4 5.14