Java String 생성 방법

과녁스·2022년 3월 16일
0

Java

목록 보기
8/8
post-thumbnail

개요


자바 String 사용 시 생성 원리와 메모리 참조 방법을 학습하면서 정리해보았습니다.

String 생성 방법

Java에서 String을 생성하는 방법은 아래와 같을 것입니다.

String a = "";
String a = new String("");

위 두가지 모두 String 객체를 생성하지만, 참조되는 메모리 영역이 다릅니다.

참조 방법

자바의 String은 특별한 '참조 자료형' 입니다. new 생성자를 이용해서 인스턴스를 생성한 뒤, heap에서 메모리 관리가 이루어 진다는 사실은 다른 참조 자료형과 다를게 없습니다.

하지만 다른 참조형과는 다르게 변하지 않는다는 특징을 가지고 있다. String은 한번 저장된 String객체의 값은 변하지 않습니다.

위의 그림에서 s3 = s3 + s3; 를 실행한다면 'CatCat'값을 가지는 String 객체를 새로 생성하고, s3는 생성된 인스턴스를 참조하게 됩니다.

결과적으로 String 객체들의 연산이 이루어지면, 새로운 객체를 계속 만들어내기 때문에 메모리 관리 측면에서 상당히 비효율적이다.

이러한 이유로 만들어진 메모리 영역이 Heap 안에 있는 String Constant Pool 이다.

여기에는 기존에 만들어진 문자열 값이 저장되어 있고, s1과 s2처럼 리터럴로 생성된 같은 값을 가지는 객체는 String pool의 같은 레퍼런스를 가지게 됩니다.

intern() 메서드

동일한 문자열 String 리터럴을 한번 이상 생성하게 되면, 각각의 고유 String 값의 복사본 하나만 저장됩니다.

이를 “string interning” 이라고 부른다. 자바에서 모든 컴파일 시간에 상수 문자열은 자동으로 intern 하게 됩니다.

String 클래스는 intern 메서드를 제공합니다. intern 메서드의 역할은 String 객체를 상수화 시켜 준다. 생성자를 사용하여 문자열을 생성하더라도 String Pool에 있는 문자열을 가리키게 합니다.

String a = "abcd";
String c = new String("abcd").intern(); 

System.out.println(a == c); // true 
System.out.println(a.equals(c)); // true

출처🙏

profile
ㅎㅅㅎ

0개의 댓글