LoGin
article thumbnail
반응형

 

 

 

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 객체의 값을 변경하려면 새로운 객체를 생성해야 합니다. 이 때 기존 객체는 가비지 컬렉터에 의해 제거됩니다.

 

 

728x90
반응형
profile

LoGin

@LoGinShin

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!