-
[JAVA] data type : 원시형과 참조형의 차이Programming🧑💻/Java 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의 메모리 주소를 가진다.
출처: https://hyperskill.org/learn/step/5035 변수를 복사할 때
// a는 원시형 변수 int a = 100; int b = a; // language는 참조형 변수 String language = new String("java"); String java = language;
- 원시형 변수는 변수가 값을 가지고 있기 때문에 기존의 변수를 새로운 변수에 할당하면 새로운 변수는 기존의 변수의 값을 똑같이 가짐
- 참조형 변수는 값이 아닌 객체의 주소를 가지고 있기 때문에 새로운 변수는 기존 변수가 갖는 객체의 주소를 복사해 갖는다.
- 즉 새로운 변수는 새로운 객체를 가리키는 것이 아니라 기존 Heap상에 있던 객체를 가리킨다.
출처: https://hyperskill.org/learn/step/5035 변수를 비교할 때 ( == )
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
출처: https://hyperskill.org/learn/step/5035 'Programming🧑💻 > Java' 카테고리의 다른 글
[JAVA] 컴퓨터와 자바 메모리에 대한 이해 (0) 2023.03.07 [JAVA] String Constant Pool은 무엇일까? (0) 2022.12.17 [JAVA] final (0) 2022.10.25 [JAVA] static (0) 2022.10.21 [JAVA] Enums (0) 2022.10.08