[자바 기초] String Class를 선언하고 선언한 내용을 바꾸면 어떻게 되는건가요??

조회수 507회

자바에서 스트링을 사용할때

String str1 = "hello"; 으로 하면 상수영역에 선언된다는 것을 배웠습니다.

그런데 상수영역에 선언할 시 String str1 = "hello"; String str2 = "hello"; 와 같이 똑같은 hello를 가르키면 str1과 str2가 같은 위치를 가르키도록 되는데 이걸 해보다가 궁금한 점이 생겼습니다.

만일 제가 기존의 [String str1 = "hello";] 아래에 [str1 = "h";] 라고 적을 경우 str1은 기존 위치에 hello를 h로 바꾸는 것이 아니라 상수 영역에 새로운 h라는 자리를 만들어 내게 되는 건가요?

답변해주셔서 감사합니다 ^

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 네 맞습니다. 상수영역에 "h" 를 할당하고 그것을 가리키게 됩니다.

    또한 기존의 hello 는 참조하는 대상이 없다면 가비지 컬렉션 대상이 됩니다.(oracle jvm 버전7부터)

    구버전(sun jvm 6 이하)에서 상수풀은 가비지 컬렉션 대상이 아니었습니다.

    그러나 permgen 이 heap 영역으로 변경되었고 가비지 컬렉션 대상이 되었습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)