[Java] String, 리터럴 객체의 메모리 할당(2) - 불변의 String...?

 

2024.04.21 - [Programming/Java] - [Java] String, 리터럴 객체의 메모리 할당(1)

이 글을 읽기 전에, 위 [Java] String, 리터럴 객체의 메모리 할당(1) 편을 읽고 와주시기 바란다.

불변의 String..?

String은 JavaScript의 const와 같이 한 번 할당된 값을 변경할 수 없다.

아래의 예시를 보면

public class StringTest2 {

    public static void main(String[] args) {
        String std = "고길동";
        System.out.println(std.hashCode()); // print: 111222333(예시)
        std = std + "소프트웨어 개발 전공"; // 이렇게 값을 변경할 경우
        System.out.println(std.hashCode()); // print: -932423113(예시) 출력값이 달라진다.
    }
}

이와 같이 String 객체가 한번 생성된 이후에는 변하지 않는다는 특징이 있는데, 변수에 비유하자면 상수와 같은 개념인 것이다.

여기서 질문을 던질 수 있어야 한다.

그럼 기존의 std는 어떻게 되는 거지..?

그렇다.
여기서 중요한 점은 기존의 std라는 주소가 그대로 존재하면서 "고길동 소프트웨어 개발 전공"이라는 리터럴 객체의 새로운 주소가 생긴다는 것이다.

여기서 또 문제점이 발생한다.

아니 그럼 메모리 낭비가 심한 거 아닌가?

역시 그렇다...

이를 해결하기 위해 StringBuffer라는 것이 등장한 것이다.

StringBuffer에 대해서는 글을 포스팅한 뒤에 링크를 임베디드 해드리겠다.