String 문자열을 리터럴을 사용한 경우, 같은 문자열을 갖는 변수들에 대해 동일한 주소값을 갖는다
== 동등비교 연산자는 String의 주소값을 비교하는 것인데 같은 문자열에 대해 리터럴을 사용한 경우, 동등비교 시 true를 반환한다
String str1 = "Youn"; String str2 = "Youn";
위와 같은 예제의 경우 str1 == str2 비교 시, Youn이라는 같은 주소의 String 객체를 가리키므로 true를 반환하게 된다
그렇다면 str1에서 먼저 Youn 문자열을 갖는 String 객체가 할당이 되고
이후에 str2가 만들어 졌는데 어떻게 Youn 문자열을 갖는 String 객체가 생성되어 있는지 알고 동일한 주소를 할당할 수 있는건지 궁금해졌다
String은 클래스 타입으로 참조 타입이다
String str1 = "Youn";
으로 선언하게 된다면str1
변수는stack영역
에 만들어지고문자열 "Youn"
은 힙 영역 중에서도상수 풀(constant pool)에 생성
이 된다그리고 이렇게 생성된 String 객체의 주소값을 stack 영역에 만들어진 str1 변수가 알게 되는 것이다
이후에
String str2 = "Youn";
의 경우,상수 풀(constant pool)에 문자열 "Youn"이 존재
하는지 확인을 하고 있는 경우에는상수 풀에 존재하는 String 객체의 주소값을 반환하여 str2에게 알려주는 것이다
이렇게 리터럴로 생성 시 같은 주소를 가리키게 되는 원인을 학습했다
'Java' 카테고리의 다른 글
Java 상속 (0) | 2022.01.09 |
---|---|
Java의 Class (0) | 2022.01.08 |
Java 참조 타입 (0) | 2022.01.06 |
Java 조건문과 반복문 (0) | 2022.01.05 |
Java의 변수, 타입, 연산자 (0) | 2022.01.05 |