인프런 커뮤니티 질문&답변

cklee님의 프로필 이미지
cklee

작성한 질문수

김영한의 실전 자바 - 중급 1편

String 클래스 - 불변 객체

불변객체 관련 질문드립니다.

작성

·

116

0

같은 참조값을 사용하는 다른 스트링객체의 값이 변경 될수 있어 스트리잉 불변객체로 되어있다는것은 이해했습니다.

 

만약 스트링 풀에 hello java가있다면

String str1 ="hello";

String str2 = str1.concat(" java");

 

이때 str2는 스트링 풀에있는 hello java의 참조값을 갖는걸까요?

답변 3

1

아닙니다.

image.png

equls 및 참조 주소값을 출력해 봣는데 아니더군요..
틀리다면 공식서포터즈님들이 대답해주실거에요.

+수정

사진에 hello java가 없어서 추가..(너무 수정해되서 죄송합니다.)+equls는 같게 나오더군요... == 하면 false 나옵니다. 객체값비교..

0

cklee님의 프로필 이미지
cklee
질문자

생각하는자님 답변은 감사합니다.

결과는 아니더라도 왜그런지가 궁금합니다. 공식 서포터즈님들께 질문드리면

위에 답변을 통해 새로운 참조값으로 생긴다는것은 알겠는데

스트링풀을 활용하는 경우는 리터럴로 스트링객체를 만들때만 사용하는것일까요?

위에 str1.concat(" java"); 이시점에 new String()으로 객체를 새로 생성하는것으로 간주되기때문에

스트링 풀을 이용하지 않는것인가요?

0

cklee님의 프로필 이미지
cklee
질문자

스트링 풀에 있는 참조값이 아니라면 새롭게 생성되는 참조값일까요?

예 코드로 돌려본결과.

String str7 ="hello java";

String str8 ="hello java";

은 같은 참조 값이 나오지만,

String str1 ="hello";

String str2 = str1.concat(" java");

이렇게 하는 경우 새로운 참조값을 갖게 되네요.

image.png

사진 참조.

cklee님의 프로필 이미지
cklee

작성한 질문수

질문하기