영호

[Java] String Constant Pool 본문

Language/JAVA

[Java] String Constant Pool

0h0 2022. 6. 8. 13:14

Java String객체 생성 방법

Java에서 String객체를 만드는 방법은 2가지가 있습니다.

  1. String literal사용 -> String a = "test";
  2. new 연산자 활용 -> String a = new String("test");

 

String Constant Pool이란

Java의 Heap메모리에서는 String Constant Pool영역이 있습니다. 이는 String literal로 생성된 값들을 가지고 있습니다. 추후, String literal로 String Constant Pool에 있는 동일한 값으로 String객체가 생성된다면  Heap메모리의 별도 영역을 따로 할당하지 않고 String Constant Pool에 이미 할당되어 있는 해당 값의 주소를 재활용해줍니다.

public static void main(String[] args) {
        String a = "test";
        String b = "test";

        System.out.println(a == b); // true
    }

Java에서 String은 reference type이기 때문에 String객체들은 모두 다른 주소 값을 가지고 있어야 할 것입니다. 그러나 위 코드에서 보면 == 연산자로 reference type의 주소 값을 비교했지만 true가 나오게 됩니다.

==, equals()의 차이

 

 이는 String literal을 이용해 "test"라는 동일한 값을 가진 String객체를 생성했기 때문에, String a = "test"; 를 생성하면서 String Contant Pool에 이미 "test"값의 주소가 있는 상태에서, String b = "test"를 만들었기 때문에 a와 b가 동일한 주소 값을 가지게 된 것입니다.

 

주의할 점

new연산자를 이용해 String객체를 생성할 경우 String Contant Pool이 아닌 Heap영역에 별도의 주소 값을 가지게 됩니다.

public static void main(String[] args) {
        String a = "test";
        String b = new String("test");

        System.out.println(a == b); //false
    }

 

Comments