record logo record

String 클래스

String literalString = "literal"; //리터럴로 생성하는 방식 
String newString = new String("literal"); //new로 생성하는 방식 

//위에서 "literal" 이라는 문자열을 String Pool에서 생성했기 때문에 
//이후에 추가한 str는 추가적으로 생성하지않고 똑같은 문자열을 가리킨다. 
String str = "literal"; 

위 코드의 두 가지 String class 생성 방식에 따라 나뉘는데, 두 방식 모두 JVM 메모리 중 힙(heap) 영역에 생성 된다는 점은 같다.

하지만 리터럴로 생성하면 특수하게 “String Pool” 이라는 공간에 생성된다. 이 메모리 공간에 생성된 문자열 값은 절대 변하지 않습니다.(불변 객체)

그래서 ‘+’ 연산이나 .concat() 메소드를 이용해서 문자열 값에 변화를 줘도 메모리 공간 내의 값이 변하는 것이 아니라, “String Pool”이라는 공간 안에 메모리를 할당받아 새로운 String 클래스 객체를 만들어서 문자열을 나타내는 것입니다. 따라서, String 클래스를 특징 을 정리하자면 아래와 같습니다.

StringBuffer 클래스

StringBuilder 클래스

요약 정리

References