String을 생성하는 2가지 방법과 차이점
Last updated
Last updated
자바에서 String 객체 생성하는 방법 2가지
String literal : " " 사용 => 내용이 같다면 같은 객체! 동일한 메모리 주소를 갖는다!
new 연산자 사용 => 내용이 같더라도 개별적인 객체
흔히 new 연산자로 String 객체를 생성지 않는 것이 좋다는 말이 있다. 이 말을 이해해보자. String literal로 생성하면 해당 String 값은 Heap 영역 내 "Strinng Constant Pool"에 저장되어 재사용되지만, new 연산자로 생성하면 같은 내용이라도 여러 개의 객체가 Heap영역을 차지한다.
String literal 로 생성한 객체는 String Pool에 들어간다.
String literal 로 생성한 객체값(ex."Cat")이 이미 String Pool에 존재한다면 해당 객체는 String Pool의 reference를 참조한다!
new 연산자로 생성 String 객체는 같은 값이 String Pool에 이미 존재하라도, Heap 영역 내에 별도 객체를 가리키게 된다.
(참고) String 클래스의 intern( ) 메서드 해당 String과 동등한 String 객체가 이미 String Pool에 존재한다면 그 객체 그대로 리턴하고, 그렇지 않다면 호출된 String 객체를 StringPool에 추가하고 객체의 reference를 리턴한다.