DEV/JAVA
변수 | 기본형 vs 참조형
devvnn
2021. 12. 21. 21:11
기본형(Primitive Type)
- 기본형의 경우에는 변수가 값 자체를 보관
- int, boolean, char, double 등
int a = 3;
int b = a;
System.out.println(a); // 3 출력
System.out.println(b); // 3 출력
a = 4;
System.out.println(a); // 4 출력
System.out.println(b); // 3 출력
b = 7;
System.out.println(a); // 4 출력
System.out.println(b); // 7 출력
|
cs |
- 먼저 a에 3이 보관되고, b에는 a의 값인 3이 복사되어 보관
- a = 4를 하면 a만 바뀌고 b는 그대로 3
- 마찬가지로 b = 7을 하면 b만 바뀌고 a는 그대로 4
참조형(Reference Type)
- 참조형은 변수가 값 자체를 보관하는 것이 아니라, 변수가 값을 '가리킨다'
- 실제 값은 메모리의 어딘가에 저장되어 있고, 변수는 그 영역을 가리키는 역할
- 참조형의 기본값은 null
객체
Person p1, p2;
p1 = new Person("김여름", 28);
p2 = p1;
p2.setName("김가을");
System.out.println(p1.getName());
System.out.println(p2.getName());
|
cs |
김가을
김가을
|
cs |
- p1은 "김여름"이라는 이름을 가진 Person 인스턴스가 저장되어 있는 영역을 가리킴
- p2 = p1은 p2에게 같은 영역을 가리키라는 명령
- 그 후, p2.setName("김가을")를 하면 그 영역에 있는 인스턴스의 name은 "김여름"으로 바뀜
- p1, p2 모두 같은 영역을 가리키고 있으니 두 출력값은 모두 "김가을"
배열
자바에서 배열도 객체이기 때문에 참조형
int[] a = new int[3];
int[] b = a;
a[0] = 1;
b[0] = 2;
System.out.println(a[0]);
System.out.println(b[0]);
|
cs |
- null은 참조형 변수만 가질 수 있는 값
- 만약 null을 보관하고 있는 변수의 메소드를 호출하려고 하면 NullPointerException이라는 오류가 나게 됨