개발학생
183
2019-06-03 13:10:45
5
413

자바 String 인스턴스 생성 시기에 대해 질문드립니다.


1. String str1 = "abc";

2. String str2 = new String("abc");


1번의 경우엔 클래스가 메모리에 올라올 때 "abc"문자열을 가진 인스턴스가 생성된다.
(소스파일에 있는 문자열 리터럴들이 컴파일시 클래스파일의 리터럴 목록에 저장되고 클래스 로더에 의해 클래스파일이 메모리에 올라갈 때 리터럴들이 JVM의 constant pool에 저장됨.)

2번의 경우엔 new 연산자에 의해 heap 영역에 인스턴스가 생성된다.

제가 이해한 것이 맞는지 확신이 안서는데 틀린 부분이 있다면 가르쳐 주시면 감사하겠습니다.
결론적으로 1번과 2번의 인스턴스 생성 시기가 다른것이 맞나요?

0
0
  • 답변 5

  • 천재서비
    599
    2019-06-03 13:26:17

    생성시기는 상관없어요


    단지 차이일뿐이죠 가비지컬렉션 대상이 되느냐 같은 참조형으로써 변하냐 변하지 않느냐 차이

    0
  • 개발학생
    183
    2019-06-03 20:48:33

    천재서비 참조형으로써 변하냐 변하지 않느냐 차이가 무슨 말인지 이해가 잘 안되네요.... 혹시 참고할 만한 자료나 부가설명이 가능 하신가요..?

    0
  • fx
    1k
    2019-06-03 21:46:19

    같은 시기에 생성 될 수도 있고 아닐 수도 있습니다.


    2번은 해당 코드가 실행되는 시점에 생성됩니다.

    1번의 경우는 "abc" 가 이미 생성된 적이 있다면, 재 사용 될 수도 있습니다.


    String intern (문자열 인턴)  으로 검색하면 좀 더 자세히 알 수 있으리라 생각합니다.

    0
  • 천재서비
    599
    2019-06-04 11:28:10

    https://ict-nroo.tistory.com/18

    0
  • 개발학생
    183
    2019-06-07 23:32:35

    천재서비 자료 정말 감사합니다! 


    fx 답변 감사합니다! 

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.