본문 바로가기

Java

Java에서 String이 메모리에 생성되는 과정의 이해

  • String 문자열을 리터럴을 사용한 경우, 같은 문자열을 갖는 변수들에 대해 동일한 주소값을 갖는다

  • == 동등비교 연산자는 String의 주소값을 비교하는 것인데 같은 문자열에 대해 리터럴을 사용한 경우, 동등비교 시 true를 반환한다

    String str1 = "Youn";
    String str2 = "Youn";
  • 위와 같은 예제의 경우 str1 == str2 비교 시, Youn이라는 같은 주소의 String 객체를 가리키므로 true를 반환하게 된다

  • 그렇다면 str1에서 먼저 Youn 문자열을 갖는 String 객체가 할당이 되고

  • 이후에 str2가 만들어 졌는데 어떻게 Youn 문자열을 갖는 String 객체가 생성되어 있는지 알고 동일한 주소를 할당할 수 있는건지 궁금해졌다

  • String은 클래스 타입으로 참조 타입이다

  • String str1 = "Youn";으로 선언하게 된다면

  • str1 변수는 stack영역에 만들어지고

  • 문자열 "Youn"은 힙 영역 중에서도 상수 풀(constant pool)에 생성이 된다

  • 그리고 이렇게 생성된 String 객체의 주소값을 stack 영역에 만들어진 str1 변수가 알게 되는 것이다

  • 이후에 String str2 = "Youn";의 경우, 상수 풀(constant pool)에 문자열 "Youn"이 존재하는지 확인을 하고 있는 경우에는

  • 상수 풀에 존재하는 String 객체의 주소값을 반환하여 str2에게 알려주는 것이다

  • 이렇게 리터럴로 생성 시 같은 주소를 가리키게 되는 원인을 학습했다

'Java' 카테고리의 다른 글

Java 상속  (0) 2022.01.09
Java의 Class  (0) 2022.01.08
Java 참조 타입  (0) 2022.01.06
Java 조건문과 반복문  (0) 2022.01.05
Java의 변수, 타입, 연산자  (0) 2022.01.05