String constant pool
String 객체에 값을 할당하는 방법은 두 가지가 있습니다.
- 리터럴 대입
- new 키워드 사용하여 대입
String str1 = "hello";
String str2 = new String("hello");
String str3 = "hello";
String str4 = new String("hello");
System.out.println(str1==str2); //false
System.out.println(str1==str3); //true
System.out.println(str2==str4); //false
str1, str3은 리터럴을 바로 대입했고 str2, str4는 new 키워드를 사용해 문자열을 대입했습니다.
네 변수 모두 "hello"라는 문자열을 가지고 있지만, 참조하는 메모리 주소를 비교해보니 결과가 다르게 나옵니다.
리터럴로 값을 할당한 경우는 메모리의 heap영역 안의 String constant pool이라는 곳에 문자열이 저장됩니다.
만약 다른 변수에 같은 리터럴값이 또 할당되면 기존에 String constant pool에 저장되어있던 문자열을 참조합니다.
그래서 str1과 str3가 가리키고 있는 주소는 같게 됩니다.
반면 new를 통해 값을 할당한 경우는 메모리의 heap영역 중 String constant pool이 아닌 곳에 문자열이 저장됩니다.
new를 사용하면 같은 문자열이 또 할당되더라도 다른 메모리영역에 같은 문자열을 따로 저장하게 됩니다.
str2와 str4는 같은 문자열이 할당되었지만 다른 주소를 가리키고 있습니다.
'Java' 카테고리의 다른 글
[JAVA] static 메서드에서 non-static 멤버에 접근 (2) | 2024.04.15 |
---|---|
[JAVA] Comparable로 객체 정렬하기 (0) | 2024.04.14 |
[JAVA] String과 StringBuffer/StringBuilder (0) | 2024.03.09 |
[JAVA] 다형성이란? 다형성이 필요한 이유 | 오버라이딩, 오버로딩, 타입 변환(업캐스팅) (0) | 2024.03.06 |