String_String pool

2024. 4. 17. 00:14JAVA

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;

가 된다.

 

 

 

'JAVA' 카테고리의 다른 글

중첩 클래스  (0) 2024.05.28
enum  (0) 2024.05.01
Object OCP(Open Closed Principle)  (0) 2024.04.05
java.lang_Object Class  (0) 2024.04.05
java.lang  (0) 2024.04.04