Back-Language/Java
[Java] String, 리터럴 객체의 메모리 할당(1)
200scs
2024. 4. 21. 07:46
우선, String
. 즉, 리터럴 객체에 대해 알아보자
리터럴 객체?
리터럴 객체라는 것은 여러분이 자주 사용했을 String
이라는 타입의 변수를 생성하는 것이다.
String name = "홍길동";
메모리 할당 방식
String도 다른 타입과 동일하게 '클래스'이다.
그런데 String 클래스는 특이하게도 객체를 생성하는 방법이 두 가지이다.
String Class의 두 가지의 객체 생성 방식
1. new String
첫 번째는 객체 생성 연산자인 new
를 사용한 방법이다.
(예시)
String name1 = new String("홍길동");
String name2 = new String("홍길동");
if(name1 == name2)
System.out.println("두 주소가 같다");
else
System.out.println("두 주소가 다르다");
// result: "두 주소가 다르다"
위와 같은 형태로 출력된다.
이유는 1번(객체 생성 연산자 사용) 방식으로 진행하면 값이 같든 다르든 새로운 메모리 공간에 String 객체가 생성된다
하지만 2번(리터럴 형태)의 형태로 생성한다면,
2. String
두 번째는 큰 따옴표("")로 감싸는 형식은 리터럴 형태의 생성 방법이다.
(예시)
String name3 = "홍길동";
String name4 = "홍길동";
if(name1 == name2)
System.out.println("두 주소가 같다");
else
System.out.println("두 주소가 다르다");
// result: "두 주소가 다르다"
우선 리터럴 메모리라는 곳에 생성된다.
여기서 중요한 점은 리터럴 메모리에 생성될 때는 먼저 생성하는 것이 아니라, 같은 값을 가지고 있는 객체가 있는지 탐색하고
- 같은 값을 가지고 있는 객체가 존재한다면 -> 기존 객체의 주소를 복사하여 생성한다.
- 같은 값을 가지고 있는 객체가 없다면 -> 새로운 주소를 생성한다.