본문 바로가기
프로그래밍/Java

[Java] new String()과 ""(리터럴 방식)의 차이

by 시간많은백수 2023. 10. 14.
반응형

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) 문자열을 생성합니다. 이는 문자열의 내용을 변경할 수 없음을 의미합니다. 만약 문자열을 변경해야 한다면 새로운 문자열을 생성해야 합니다.

일반적으로 문자열을 생성할 때는 빈 문자열 리터럴("")을 사용하는 것이 권장됩니다. 그 이유는 메모리 사용량이 줄어들고 성능이 향상되기 때문입니다. 또한, 문자열 리터럴을 사용하면 문자열의 내용이 변경되지 않아 예측 가능한 동작을 보장하고 버그를 줄일 수 있습니다.

반응형