Java에서의 String과 메모리 할당에 대해 응용하고 이해해보려 합니다. 특히, 주소값과 데이터값의 차이점을 이해하는 것이 중요한 주제입니다.
먼저, String클래스를 사용해 문자열을 생성하고 출력하는 코드를 보면
public class StringArray {
public static void main(String[] args) {
String str = new String("Superman");
String str2 = new String("Batman");
System.out.println(str);
System.out.println(str2);
String str3 = "Superman";
String str4 = "Batman";
System.out.println(str3);
System.out.println(str4);
}
}
여기서 str과str2는 새로운 String 객체를 생성하여 메모리를 할당하고, str3와 str4는 문자열 리터럴을 사용하여 String 객체를 생성합니다. 이들의 주소값과 데이터값을 비교하기 위한 코드는 다음과 같습니다.
public class StringArray {
public static void main(String[] args) {
String str = new String("Superman");
String str2 = new String("Superman");
if(str == str2) { //주소값 비교
System.out.println("Same");
}else {
System.out.println("Diff");
}
if(str.equals(str2)) { //데이터 값 비교
System.out.println("Same");
}else {
System.out.println("Diff");
}
String str3 = "Superman";
String str4 = "Superman";
if(str3 == str4) { //주소값 비교
System.out.println("Same");
}else {
System.out.println("Diff");
}
if(str3.equals(str4)) { //데이터값비교
System.out.println("Same");
}else {
System.out.println("Diff");
}
System.out.println("str5, str3 주소값 비교");
String str5 = "Superman";
if(str5==str3) {
System.out.println("Same");
}else {
System.out.println("Diff");
}
}
}

위의 코드에서는 주소값 비교를 위해 '==' 연산자를 사용하고, 데이터 값 비교를 위해 'equals' 메서드를 사용합니다.
결과를 보면, new로 생성된 str과 str2는 주소값이 다르지만 데이터값은 같습니다.
반면, 문자열 리터럴로 생성된 str3와 str4는 주소값과 데이터값 모두 같음을 확인할 수 있습니다.
이는 Java의 String Pool이라는 특별한 메모리 영역 때문입니다.

String Pool은 동일한 문자열이 여러 번 사용될 경우, 메모리 효율을 위해 재사용하는 영역입니다.
new를 사용하지 않고 문자열 리터럴로 String 객체를 생성하면, 동일한 문자열이 String Pool에 이미 있다면 그 주소를 재사용합니다.
또한, String 클래스는 불변성을 가지는 특징이 있습니다. 즉, 한번 생성된 String 객체의 값은 변경할 수 없습니다.
String 객체의 값을 변경하려면 새로운 객체를 생성해야 합니다. 이 때 기존 객체는 가비지 컬렉터에 의해 제거됩니다.
'코딩 > JAVA' 카테고리의 다른 글
| JAVA 메서드(method)의 이해와 활용 (0) | 2024.02.05 |
|---|---|
| Java 인텔리제이 디버깅 모드 사용하는 이유와 사용법 직접 사용해보자 (0) | 2024.02.01 |
| JAVA 배열(Array) 2차원 배열의 이해 정리 (0) | 2024.01.19 |
| Java 데이터 다른 클래스에서도 사용하는법, 페이지간 데이터 이동 (0) | 2023.11.24 |
| JAVA 단순 계산기 만들기 예제 - 간단한 설명 (2) | 2023.07.29 |