혹시 아래 경우의 차이에 대해서 고민해보신 적 있으신가요?
혹시 그럼 val1 == val2, val1 == val3 각각의 값에 대해 명확히 답변하기 힘든 분들이 계신다면 이번 포스팅이 도움되시리라 생각됩니다.
우선 위 예제의 결과 값은 아래 사진과 같습니다.
결론부터 말씀을 드리자면 ""와 같이 Literal로 String을 생성할 경우 String Constant Pool 영역에 저장되어지며 new 키워드를 사용하여 생성할 경우 JVM Heap 영역에 각각 영역을 차지하여 생성하게 됩니다.
즉, val1 == val2의 경우 String Constant Pool에 동일한 참조 주소값을 가리키고 있으므로 true가 반환된 것이고 val3의 경우 별도의 객체가 생성이 되어 val1 == val3이 false가 반환된 것입니다.
위 사진을 보시면 구조적으로 이해가 조금 더 쉬울 것 같습니다.
특히 성능에 대해 세세한 부분까지 고려하여 개발을 한다면 String 객체 생성의 경우에는 new 키워드가 아닌 ""(Literal)을 사용하여 생성하시는게 메모리 관리 상 조금 더 나은 결과를 가져올 수 있지 않을 까 싶습니다.