위 그림은 JVM의 Runtime Data Area의 형태로 이중 Method Area의 Runtime Constant Pool에 String Constant Pool 이라는게 존재합니다.
String을 생성하는 방법은 대표적으로 2가지가 있다.
- new 연산자 방식
- literal을 이용한 방식
new 연산자
힙 영역에 새로운 String 객체를 만들고 이를 주소 값을 할당한다.
literal
String 객체는 내부적으로 intern() 메소드를 호출하게 된다.
intern 메소드는 String Constant Pool 에서 해당 문자열이 존재하는지 검색하고
존재하면 해당 문자열의 주소값을 반환
존재하지 않으면 새로운 주소값을 할당하여 반환한다.
이 때문에 아래 그림처럼 동일한 문자열이더라도 ==비교가 false이 된다.
'JAVA' 카테고리의 다른 글
JVM GC(Garbage Collection) - 자바에서 메모리 관리하는 방법 (0) | 2021.04.30 |
---|---|
==, equals(), hashcode() 비교 (0) | 2021.04.30 |
JVM 스택과 힙 영역 저장 되는 것들 (0) | 2021.04.30 |
자바가상머신(JVM) 이란 (0) | 2021.04.30 |
자바의 열거형(enum) (0) | 2021.02.16 |