우선, 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: "두 주소가 다르다"
우선 리터럴 메모리라는 곳에 생성된다.
여기서 중요한 점은 리터럴 메모리에 생성될 때는 먼저 생성하는 것이 아니라, 같은 값을 가지고 있는 객체가 있는지 탐색하고
- 같은 값을 가지고 있는 객체가 존재한다면 -> 기존 객체의 주소를 복사하여 생성한다.
- 같은 값을 가지고 있는 객체가 없다면 -> 새로운 주소를 생성한다.
'Back-Language > Java' 카테고리의 다른 글
[JAVA] 입출력 속도 향상시키기 - BufferReader/BufferWriter (BOJ 2751 수 정렬하기를 풀며..) (0) | 2024.07.26 |
---|---|
[Java] 중복을 허용하지 않는 컬렉션 - SET (0) | 2024.07.16 |
[Spring] 테스트 케이스 given - when - then 패턴 (0) | 2024.07.09 |
[Java] String, 리터럴 객체의 메모리 할당(2) - 불변의 String...? (0) | 2024.04.21 |