String str = "hello"에서 hello는 어디에 저장이 되나요?

Kkd·2024년 12월 25일
0

매일메일 개념정리

목록 보기
54/93

String str = "hello";의 경우 "hello"JVM의 문자열 상수 풀(String Constant Pool)에 저장됩니다.

문자열 상수 풀이란?

  • 문자열 상수 풀(String Constant Pool)은 JVM의 메소드 영역(Method Area)에 있는 특별한 메모리 영역입니다.
  • 동일한 문자열 리터럴이 중복해서 생성되지 않도록 효율적으로 관리하기 위해 사용됩니다.
  • 문자열 리터럴이 선언되면, JVM은 해당 문자열이 상수 풀에 이미 존재하는지 확인하고:
    • 존재하면, 기존 객체를 재사용합니다.
    • 존재하지 않으면, 새로운 문자열 객체를 생성하여 상수 풀에 저장합니다.

예시

String str1 = "hello";
String str2 = "hello";

System.out.println(str1 == str2); // true (같은 객체를 참조)
  • "hello"는 상수 풀에 저장됩니다.
  • str1str2는 모두 같은 "hello"를 참조합니다.

new String("hello")와의 차이점

String str3 = new String("hello");

System.out.println(str1 == str3); // false (다른 객체를 참조)
  • new String("hello")를 사용하면 항상 새로운 객체가 힙(Heap) 메모리에 생성됩니다.
  • 이 경우, 힙에 있는 객체와 상수 풀에 있는 객체는 서로 다른 메모리 주소를 가지므로 == 비교 결과가 false가 됩니다.

요약

  • "hello"문자열 상수 풀(String Constant Pool)에 저장됩니다.
  • 상수 풀을 활용하면 메모리를 절약하고 문자열 비교 속도를 높일 수 있습니다.
  • 하지만 new String()은 상수 풀을 사용하지 않고 힙에 새로운 객체를 생성합니다.

추가 학습 자료

profile
🌱

0개의 댓글