← 질문 목록
#316깊이 0

같은 문자열 리터럴이 같은 객체인 이유는?

언어 · 런타임기초메모리언어 의미론

리터럴은 풀에 한 벌만 두고 그 자리를 함께 가리키기 때문이다.

높은 주소낮은 주소
  1. 스택

    변수는 자리만 가리킨다

  2. 위로 자랍니다

    new로 만든 것은 여기 따로 생긴다

  3. 문자열 풀

    리터럴은 여기 한 벌만 있고 함께 쓴다

String a = "cs"String b = "cs"는 같은 자리를 가리킨다. 그래서 a == b가 참이다.

new String("cs")는 다르다. 풀에 있든 없든 에 새로 하나를 만든다. 그래서 ==로 견주면 거짓이고 equals로 견줘야 참이다.

intern()을 부르면 풀에 같은 내용이 있는지 보고 있으면 그 자리를, 없으면 넣고 그 자리를 준다.

`==`는 내용이 아니라 참조를 견준다. 문자열이 특별해서가 아니라 참조 비교라서 그렇다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

같은 문자열 리터럴이 같은 객체인 이유는?