반응형
new String() 및 ""(빈 문자열 리터럴)은 문자열을 생성하는 두 가지 다른 방법입니다. 이 두 방법 간에 중요한 차이점이 있습니다. 다음은 이 차이점을 자세히 설명합니다.
💡 메모리 할당
- new String(): new String() 생성자를 사용하여 문자열을 만들면 새로운 문자열 객체가 힙(heap) 메모리에 항상 생성됩니다. 이것은 메모리를 더 많이 사용하며 문자열이 같은 내용을 가진 다른 문자열과 비교할 때 참조 비교(Reference Comparison)가 아닌 내용 비교(Content Comparison)를 수행해야 합니다.
- ""(빈 문자열 리터럴): 빈 문자열 리터럴(또는 문자열 리터럴)을 사용하면 문자열 풀(String Pool)에 있는 기존 문자열 객체를 재사용합니다. 따라서 동일한 문자열 리터럴을 사용하는 경우에는 하나의 문자열 객체만 힙 메모리에 생성됩니다.
1
2
3
|
String str1 = new String("Hello");
String str2 = "Hello";
String str3 = "Hello";
|
cs |
💡 성능
- new String(): new String()을 사용하면 항상 새로운 문자열 객체가 생성되므로 메모리 사용량이 늘어나고, 문자열 비교 시 내용 비교를 수행해야 하므로 성능에 영향을 줄 수 있습니다.
- ""(빈 문자열 리터럴): 문자열 리터럴을 사용하면 동일한 문자열 리터럴은 하나의 객체만 생성되어 메모리 사용량이 줄어들며, 문자열 리터럴을 상수 풀에서 찾기 때문에 문자열 비교 시에 참조 비교만 수행하므로 성능이 더 우수합니다.
💡 불변성
- 둘 다 불변한(Immutable) 문자열을 생성합니다. 이는 문자열의 내용을 변경할 수 없음을 의미합니다. 만약 문자열을 변경해야 한다면 새로운 문자열을 생성해야 합니다.
일반적으로 문자열을 생성할 때는 빈 문자열 리터럴("")을 사용하는 것이 권장됩니다. 그 이유는 메모리 사용량이 줄어들고 성능이 향상되기 때문입니다. 또한, 문자열 리터럴을 사용하면 문자열의 내용이 변경되지 않아 예측 가능한 동작을 보장하고 버그를 줄일 수 있습니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java] Java의 GC(Garbage Collector)는 어떻게 동작할까 (1) | 2023.10.16 |
---|---|
[Java] 리플렉션(Reflection)과 자바 다이나믹 프록시(Java Dynamic Proxy) (0) | 2023.10.15 |
[Java] HashMap vs HashTable vs ConcurrentHashMap의 차이 (2) | 2023.10.13 |
[Java] Java가 Call by Value인 이유 (0) | 2023.10.12 |
[Java] Call by Reference와 Call by Value의 차이 (0) | 2023.10.12 |