String a = "Hello"; # 문자열 리터럴 생성 방식
String b= new String("Hello"); # new 연산자를 이용한 생성 방식
두 방식 모두 문자열을 생성하는 방식이나
가장 큰 차이점은 메모리 영역 부분입니다.
Java에서는 String을 저장하는 방식은 총 2가지 입니다.
Headp에 저장하거나 혹은 별도의 string constant pool에 저장하거나!
1. 문자열 리터럴 생성 방식
큰따옴표로 둘러싼 문자의 연속체를 의미
: string constant pool이라는 영역에 존재합니다.
2. new 연산자를 이용한 생성 방식
: Heap 영역에 존재합니다.
참고로 new 연산자로 생성하는 방식은 잘 사용하지 않는다.
문자열 리터럴 방식으로 사용하면 재사용이 가능한데,
new 연산자로 생성하면 같은 내용이라도 여러 개의 객체가 불필요하게 존재할 수 있기 때문이다.
string constant pool
JVM에서 변수를 저장하게 선언하면, 해당 변수는 Heap 영역에 저장된다.
그런데, String은 조금 특이한 방식으로 저장된다.
String을 효율적으로 사용하기 위해서 다른 객체들과 차별되게
저장해두도록 했는데 바로 그 공간이 String Constant Pool이다.
String Constant Pool은
한 번 저장한 변수를 중복해서 저장해두지 않도록 만들어졌다.
문자열을 리터럴을 이용하여 선언했을 때,
String Constant Pool에 해당 변수가 있는지 확인 후,
있다면 기존 값을 참조하도록 주소값을 설정한다.
-> 이 과정에서 intern() 메서드가 사용된다.
변수가 없다면 해당 값을 String Constant Pool에 넣는다.
String interning
String 클래스 내에 존재하는 내장 메서드 intern()
해당 String 객체가 Stirng pool에 존재하면 그 객체를 그대로 리턴한다.
존재하지 않는다면 해당 String 객체를 String pool에 추가하고 객체의 reference를 리턴한다.
'여니의 프로그래밍 study > Java' 카테고리의 다른 글
[Java] 자바 8버전, 이클립스 다운로드 하는 방법 (0) | 2022.07.06 |
---|---|
[Java] 조건문 , 반복문, 배열 (0) | 2022.07.04 |
[Java] 연산자 (+증감 연산자, 비교 연산자, 논리 연산자) (0) | 2022.07.04 |
[Java] 데이터 타입 (+double형, float형 ), 형변환 (0) | 2022.07.04 |
[Java] 숫자와 문자, 문자열 (0) | 2022.07.04 |