JAVA
String_String pool
고민말고생각하는사람
2024. 4. 17. 00:14
String a = "big";
String b = "big";
String 참조변수에 "문자열" 을 대입한다는 것은
String a = new String("big");
String b = new String("big");
와 같다고 했다.
그렇다면, 아래와 같이 연산했을 때 당연히 결과값은 False 여야 한다.
a == b; // 기대값 false
그러나, 예상과 다르게 결과값은 'True' 가 나온다.
어째서일까?
이는 최적화와 관련이 있다.
String 은 몹시 자주 쓰이는 만큼, 중복값도 빈번히 발생한다.
그리고 String은 객체이다. 즉, 중복값이 많을수록 불필요한 중복 객체가 수도 없이 존재하게 된다.
물필요한 객체 = 메모리 낭비!
따라서, 이런 불필요한 낭비를 미연에 방지하기 위해,
프로그램 실행 당시, 리터럴로 입력된 문자열들을 중복값을 제거하여 한 군데에 몰아놓고 관리한다.
이 저장 공간을 'String pool' 이라 한다.
이에 따라, 리터럴로 입력한 동일한 문자열은 String pool에 저장된 동일한 String 객체를 참조하게 된다.
따라서, String 참조변수에 담기는 참조 변수도 모두 같아진다.
그 결과,
String a = "big";
String b = "big";
a == b ; // true;
가 된다.