🧶 공통점
new String() 과 ""의 차이는 둘 다 문자열을 생성하는 방법이다.
하지만 그럼 둘 중 하나만 사용하면 되지 왜 굳이 한 개가 더 있는 것일까?
🧶 차이점
두 개를 비교하기 위해 Java에서 String을 어떻게 다루고 있느냐 부터를 알아야 할 필요가 있다.
자바에서 String은 java.lang의 패키지에 String클래스의 인스턴스로 관리한다. 즉 Heap 메모리에 String을 관리하는 StringPool 이라는 곳이 있고 우리가 거기에 단어를 저장 해두고 있는 것이다.
String의 객체의 값은 변하지 않는다. 기존의 값을 변경한다고 해서 기존의 값이 사라지는 것이 아니라 그냥 추가로 더 생긴다는 것을 알 수 있다.
그렇다면 두개의 차이는 뭘까
먼저 사진을 보자 사진을 보면 바로 이해가 될 수도 있다.
- 리터럴(" ")을 통한 단어 생성
- 문자열 리터럴은 String Pool이라는 특수한 메모리 영역에 저장된다
- 동일한 문자열 리터럴이 여러 번 사용되면, 같은 객체를 가리키게 된다. 즉, s1과 s2의 값은 true가 된다는 것이다.
- 이렇게 String Pool에서 전체적으로 사용되고 있는 문자를 저장하는 방식은 메모리 효율성을 높이기 위한 장치이다
- new String()을 통한 단어 생성
- 새로운 String의 객체를 생성하는 것이다
- new를 하면 새로운 메모리 공간이 할당되고, 새로운 객체가 생성되게 된다.
- 그래서 s1 == s3 는 false가 되는 것이다.
'CS > 📝 언어' 카테고리의 다른 글
🖨 가비지 컬렉션의 동작 원리와 GC의 알고리즘 (0) | 2024.06.04 |
---|---|
🖨 절차 지향과 객체 지향 프로그래밍의 차이 (0) | 2024.05.22 |
🖨 OOP란?? (0) | 2024.05.22 |
추상 클래스와 인터페이스의 차이 (0) | 2023.10.26 |
Java의 컴파일 과정 & JVM의 구조 (0) | 2023.10.18 |