Web/BE
[Java] String 선언 방식 차이
cmlee
2023. 5. 20. 17:53
Java에서 String 객체를 생성하는 두 가지 주요한 방법은 new 키워드를 사용하는 방법과 리터럴을 사용하는 방법입니다.
1. new 키워드를 사용하는 방법
new 키워드를 사용하여 String 객체를 생성하면 항상 새로운 객체가 생성됩니다.
이 객체는 힙 메모리에 할당되며, 각각의 new 연산은 고유한 메모리 위치를 가집니다.
String str1 = new String("Hello");
String str2 = new String("Hello");
위 코드에서 str1과 str2는 내용은 같지만, 실제로는 서로 다른 메모리 위치에 있는 두 개의 서로 다른 객체입니다.
2. 리터럴을 사용하는 방법
리터럴을 사용하여 String 객체를 생성하면, 해당 문자열은 String 상수 풀(String constant pool)이라고 불리는
메모리 영역에 저장됩니다. String 상수 풀은 중복 String 리터럴의 메모리 사용량을 줄이기 위한
Java의 최적화 기능입니다. 같은 문자열 리터럴을 가진 String 객체는 모두 같은 메모리 위치를 참조합니다.
String str3 = "Hello";
String str4 = "Hello";
이러한 차이로 인해 new 키워드를 사용하여 생성된 String과 리터럴을 사용하여 생성된 String은 == 연산자로
비교할 때 다른 결과를 보일 수 있습니다. == 연산자는 두 객체가 같은 메모리 위치를 참조하는지를 비교하기 때문입니다.
하지만, equals() 메소드는 두 String 객체의 내용이 같은지를 비교하므로, 어떤 방법으로 String 객체를 생성하든
동일한 문자열 내용에 대해 true를 반환합니다.