String의 저장 위치
- JVM에서 변수를 저장하게 되면 해당 변수는 Heap영역에 저장된다.
- String도 마찬가지로 Heap에 저장되지만 자주 사용되는 타입인 만큼 특별한 방식으로 저장된다.
String Constant Pool
- String 변수를 선언하면 우선 String Constant Pool에 해당 변수가 존재하는지 먼저 확인을 한다.
- 만약 발견했다면 해당값을 참조하도록 설정한다.
- 발견하지 못했다면 새로운 String을 String Constant Pool에 저장 한다.
- 이 과정을 통해 기존에 생성된 문자열과 같은 내용이라면 추가 메모리 할당 없이 사용할 수 있다.
String 생성자 사용
- String의 생성자를 사용하면 String Constant Pool 바깥에 생성된다.
val StringA1 = "ABC"
val StringB1 = "ABC"
stringA1 == stringB1
stringA1 === stringB1
val StringA2 = "ABC"
val StringB2 = String(charArrayOf('A','B','C'))
stringA2 == stringB2
stringA2 === stringB2
- == 연산은 같은 hashcode를 반환하는지 비교하고 ===연산은 같은 주소값을 가지는지 비교한다.
- 위의 경우는 같은 String Constant Pool의 문자열을 참조하고 있어 그 주소값 또한 같게 나타난다.
- 아래의 경우는 StringB2가 String Constant Pool 바깥에 위치하여 hashcode는 값지만 주소값은 다르게 나타난다.