Programming🧑💻/Java
[JAVA] data type : 원시형과 참조형의 차이
생각 깎는 아이
2022. 9. 28. 23:10
- 참조형(Reference type)
// String class로 "java"라는 문자열을 객체를 만든뒤
// language 변수는 만든 객체를 참조한다.
String language = new String("java");
- 원시형(primitive type)
// 변수 a에 값 1을 저장한다.
int num = 100;
변수에 값을 지정할 때
- 변수를 지정 시 Stack 영역에 변수가 올라간다.
- 원시형 변수를 사용하면 Stack 상에서 변수가 값을 지니고 있다.
- "new" 키워드를 사용하여 클래스를 통해 객체를 만들면 Heap 영역에 생성한 객체에 대한 메모리가 할당되어 저장된다.
- 참조형 변수를 사용하면 원시형 변수가 Stack 상에 값을 가지고 있는 것과 달리 객체가 저장되어 있는 Heap의 메모리 주소를 가진다.
변수를 복사할 때
// a는 원시형 변수
int a = 100;
int b = a;
// language는 참조형 변수
String language = new String("java");
String java = language;
- 원시형 변수는 변수가 값을 가지고 있기 때문에 기존의 변수를 새로운 변수에 할당하면 새로운 변수는 기존의 변수의 값을 똑같이 가짐
- 참조형 변수는 값이 아닌 객체의 주소를 가지고 있기 때문에 새로운 변수는 기존 변수가 갖는 객체의 주소를 복사해 갖는다.
- 즉 새로운 변수는 새로운 객체를 가리키는 것이 아니라 기존 Heap상에 있던 객체를 가리킨다.
변수를 비교할 때 ( == )
String s1 = new String("java");
String s2 = new String("java");
String s3 = s2;
System.out.println(s1 == s2); // false
System.out.println(s2 == s3); // true
- ' == '를 사용하여 참조형 변수를 비교할 때 값이 아닌 변수가 가리키고 있는 메모리 주소를 비교한다.
- s2와 s3는 동일한 객체 주소를 가지고 (가리키고) 있기 때문에 '==' 사용 시 true
- s1과 s2가 가리키고 있는 문자열 객체는 'java'로 동일하지만 서로 다른 객체를 가리키고 있기 때문에 '==' 사용시 false