Haekt‘s log

[JAVA] new 연산자란 ? 본문

언어/JAVA

[JAVA] new 연산자란 ?

Haekt 2022. 10. 1. 18:52


오랜만에 코딩 문제를 풀다가 부딧힌 문제이다.

String 과 new String 의 차이점은 뭐지..?

여기서 new 연산자는 뭘까 ?


- new 연산자


new 연산자는 java 의 heap 영역에 저장할 공간을 마련한 후, 메모리주소를 반환하고 생성자를 실행시킨다.
새로운 객체를 생성한다는 뜻이다.

쉽게는 학교 사물함을 놔두고 내 개인 사물함을 마련한다고 보면 된다.

아래 그림으로 String 과 new String 를 비교하여 더 쉽게 살펴보자.

먼저 일반적으로 new 없이 String 으로 변수를 선언한 경우이다.

String 변수


String A, B 모두 같은 값으로 초기화 해준 경우, 이 변수들은
heap 영역의 String pool에 test 를 한번만 저장하고 그 값의 메모리주소를 가리키는 방식으로 작동이 된다.

* java는 문자열을 String pool 로 관리한다.

public class test{
	
	public static void main(String[] args) {
		
		String A="test";
		String B="test";
		
		System.out.println("A : "+System.identityHashCode(A));
		System.out.println("B : "+System.identityHashCode(B));
	
	}
	
}

그래서 같은 값의 두 변수의 메모리 값이 같게 나온다.



그럼 이번엔 new String 으로 변수를 정의한 경우이다.

new String 변수

new 를 사용하면 heap 영역에 test 값을 가지는 새로운 Stirng 객체를 만든다.
그리고 변수는 그 객체를 가리키는 방식이다.

public class test{
	
	public static void main(String[] args) {
		
		String A=new String("test");
		String B=new String("test");
		
		System.out.println("A : "+System.identityHashCode(A));
		System.out.println("B : "+System.identityHashCode(B));
	
	}
	
}

그래서 당연히 둘의 메모리 주솟값도 다르게 나온다.


따라서 String 과 new String 의 차이는 메모리에 값이 저장되는 메커니즘 차이다 ~


틀린 부분이 있다면 알려주시면 감사하겠습니다 ~

Comments