다음으로 str3와 str4는 new 키워드를 이용해 만들었습니다.
String str3 = new String("hello"); String str4 = new String("hello");
new 키워드로 인스턴스를 만들면 상수 영역을 참조하지 않습니다. new라고 나오는 순간 인스턴스를 무조건 힙(heap) 메모리 영역에 새로 만듭니다. 그래서 str3와 str4는 각각 인스턴스를 하나씩 생성합니다. 그리고 각각 만든 hello라는 문자열을 가리킵니다.
NOTE
힙(heap) 메모리 영역이란 할당해야 할 메모리의 크기를 프로그램을 실행하는 동안 결정해야 하는 경우(런타임 때) 유용하게 사용되는 공간입니다. 기본 데이터 타입은 항상 크기가 동일하지만, 객체들은 생성 시에 크기가 다를 수 있으므로 힙에 생성합니다.
정말인지 확인해볼까요? 각 변수가 가리키는 주소가 같은지, 다른지를 비교하겠습니다.
package javaStudy;
public class StringExam {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
if(str1 == str2)
System.out.println("str1과 str2는 같은 레퍼런스입니다");
}
}