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 출력
 
= 4;
System.out.println(a);  // 4 출력
System.out.println(b);  // 3 출력
 
= 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

 

2
2
cs

 

 

null

 

  • null은 참조형 변수만 가질 수 있는 값
  • 만약 null을 보관하고 있는 변수의 메소드를 호출하려고 하면 NullPointerException이라는 오류가 나게 됨