작성
·
35
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요.
String 선언시 리터럴 방식으로하면 String Pool에 해당 문자열이 있는지 확인하고, 있다면 해당 문자열의 참조값을 사용하는 것으로 알고 있는데요.
반면 new 연산자를 이용하는 방식은 String Pool 을 거치지 않고 항상 새로운 String 객체를 생성하는걸로 알고있습니다.
PDF 파일 2페이지에 이런 내용이 있는데요.
편의상 쌍따옴표로 문자열을 감싸면 자바 언어에서
new Stirng("hello")
와 같이 변경해준다.
리터럴 방식도 new 연산자를 이용하는 방식으로 자바가 변경해주는거라면 Heap 영역에 항상 새로운 String 객체를 생성하게 되는게 아닌지 궁금합니다.
감사합니다. 😃
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. pej4303님.
Java에서 문자열을 리터럴 방식으로 선언할 때와 new
키워드를 사용할 때의 차이점에 대해 문의하셨군요. String 리터럴의 동작 방식에 대해 설명드리겠습니다.
String 리터럴 방식:
String str = "hello";
라고 하면, Java는 먼저 String Pool에 “hello”라는 문자열이 존재하는지 확인합니다.new 연산자를 사용한 방식:
String str = new String("hello");
라고 하면, 무조건 새로운 String 객체가 Heap 영역에 생성됩니다.PDF 파일에서 언급된 내용은 오해의 소지가 있을 수 있습니다. 실질적으로 Java는 String 리터럴을 사용할 때 자동으로 new String()
으로 감싸는 동작을 하지 않으며, String Pool을 활용하는 최적화를 진행하고 있습니다.
이에 관련된 이해를 돕기 위해 관련된 내용이 잘 설명된 게시물을 추천드립니다:
- “String과 new String 비교”를 통해 리터럴과 new 연산자의 차이를 더 깊이 이해하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
pej4303님 저가 찾아보니까 https://www.inflearn.com/community/questions/1322032 이 글을 참조하시면 도움이 될 것 같습니다. (3.string 클래스 - pdf 6page참조)
안녕하세요. 답변 감사합니다.
근데 알려주신 게시글 접속이 안되네요. ㅠㅠ 혹시 참고할만 다른 게시글이 있을까요?