[Java] StringBuffer append("a"+"b") 메모리는 어떻게 할당될까?

2022. 11. 15. 11:07 JAVA/Java

Java는 C언어처럼 포인터가 없어 메모리의 주소와 해당 값을 함께 볼 수 없는 단점이 너무 너무 너무~ 크다 !

 

Java 문서나 많은 글을 읽어도 메모리의 구조가 어떻게 어떤 흐름으로 돌아가는 지 내가 알고 있는 이 답이 확실한가에 대한 의문도 많이 든다.

 

 

StringBuffer의 append 메소드를 사용할 때, 어떤 식으로 값이 메모리에 할당되고 흘러가는 지 내가 이해한 바를 정리하고자 한다.

 

StringBuffer sb = nes StringBuffer();
sb.append("a");
sb.append("b");
 

 

단순 참조를 위한 문자열은 String 클래스, 연산이 많은 경우는 가변적으로 문자열을 저장하고 관리하는 StringBuffer 클래스를 사용한다.

 

위 코드와 같은 경우,  다음과 같은 구조를 보인다.

 

 

 

 

그렇다면, 이런 경우에는 메모리에 데이터가 어떻게 쌓일까? 궁금증이 들었다.

 

StringBuffer sb = nes StringBuffer();
sb.append("a"+"b");
 

 

물론,  String 클래스 문자열 연산의 단점을 보완하고자 StringBuffer 클래스를 사용하는 것이니 굳이 StringBuffer에 String 연산은 안하길 바란다.

 

 

본론으로 돌아가서 위 코드의 경우 메모리 구조가 어떻게 될까?

 

 

 

다음과 같은 구조를 보이지 않을까 생각한다.

 

 

여기서 sb가 가리키는 주소의 데이터가 단순히 "ab" 데이터가 아닌, string pool에 할당된 "ab"데이터의 주소값을 갖고있을 것이다. 

 

출처 : https://haenny.tistory.com/19