크기가 정해져 있는 변수는 기초변수, 크기가 정해져 있지 않은 변수는 참조변수
1. 기초변수
크기가 정해져있는 변수
int, double , long , char, boolean .....
기초변수는 실제 데이터 값이 저장된다.
public static void main(String[] args) { int n1 = 10; int n2 = n1; System.out.println(n1); System.out.println(n2); }
실제 데이터 값이 저장되기 때문에 대입하면 실제 값이 대입된다.
2. 참조변수
참조변수는 크기가 정해져 있지 않기 때문에 값의 주소를 저장한다.
class People { int age = 10; } public class Ex01 { public static void main(String[] args) { People p1 = new People(); System.out.println(p1.age); p1.age = 20; System.out.println(p1.age); People p2 = new People(); System.out.println(p2.age); } }
People 이라는 클래스를 생성했다.
클래스 내부의 변수 값을 메인에서 실행하기 위해 p1, p2 라는 변수선언을 했다.
우선 p1.age 값이 출력하면 10이 출력된다.
그리고 p1.age를 20으로 변경하면 20으로 값이 변경된다.
하지만 p2 값을 출력하면 age 값은 그대로 10이 출력된다.
이는 p1과 p2는 주소값을 가진 참조변수이기 때문이다.
public static void main(String[] args) { People p1 = new People(); System.out.println(p1.age); p1.age = 20; System.out.println(p1.age); People p3 = new People(); p3.age = p1.age; System.out.println(p3.age); }
메인 메서드에 이런 코드를 추가했다.
새로운 변수 p3 를 선언하고 p1.age 값을 대입했다.
p3.age 는 변경된 p1.age 값이 대입된다.
대략 그림을 그리면 이런 모양이다.
변수 p1,p2,p2 는 주소를 가지고 있다. p1과 p2 는 각각 다른 주소를 가지고 있기 때문에 값이 변경되어도 영향을 미치지 않지만, p3는 p1의 주소를 대입했기 때문에 변경된 값이 출력된다.
Share article