1. 참조 변수와 일반 변수의 차이
일반 변수는 값 자체를 변수에 바로 저장.
참조 변수는 값이 들어있는 주소를 변수에 저장
(자세한 건 밑에 자세히 풀어썼으니 참고 해주세요.)
https://dalcheonroadhead.tistory.com/68
일반 변수와 참조 변수 바로 알기
1. 데이터 타입의 종류 크게 기본 타입과 참조 타입으로 나누어진다. 두 타입을 나누는 기준은 무슨 값이 저장되는가 이다. 2. 각 타입들이 값을 저장하는 원리 기본타입은 해당 변수에 값 자체를
dalcheonroadhead.tistory.com
2. a=b; 이후 b에 다른 값을 집어넣었을 때 둘의 차이
(1) 일반 변수의 경우
int a= 10; int b = 20;
a = b;
System.out.println(a);
System.out.println(b);
b = 100;
System.out.println(a);
System.out.println(b);
// 결과 값
첫 번째 출력 : 20
20
두 번째 출력 : 20
100
Stack에서 값 자체가 바뀌고 a와 b는 서로 연관되어 있지 않다.
(2) 참조 변수의 경우
Camera c1 = new Camera();
Camera c2 = new Camera();
c1.name = "카메라1";
c2.name = "카메라2";
System.out.println(c1.name);
System.out.println(c2.name);
c2 = c1;
System.out.println(c1.name);
System.out.println(c2.name);
c2.name = "고장난 카메라";
System.out.println(c1.name);
System.out.println(c2.name);
//결과 값
첫 번째 출력
: 카메라1
카메라2
두 번째 출력
: 카메라1
카메라1
세 번째 출력
: 고장난 카메라
고장난 카메라
c2 = c1; 을 해주는 순간 c1이 저장하던 주소값을 c2에 옮겨쓴다. 따라서 둘은 같은 주소를 가르키게 된다. 그 후
c2.name = "고장난 카메라";
해당 명령어가 주소를 바꾼 게 아니므로 c1과 c2는 여전히 똑같은 주소를 가르킨다. 다만 주소가 가르키는 값이 바뀐다. 따라서 둘 다 고장난 카메라를 출력한다.
따라서 일반 변수는 a= b 이후 다음 b에 이루어진대입은 a에게 영향을 주지 않지만, 참조 변수일 경우 a에게 영향이 간다.
3. 매소드에 인수로 넣었을 때 둘의 차이
(1) 일반 변수의 경우
매소드에 인수로 들어가는 것은 a,b에 들어간 값 자체임으로, 해당 매소드의 값이 a,b 변수에 영향을 주지 않는다.
만약,
public static int changNum (int num1, int num2)
{
num1 = num2;
num2 = num1;
}
public static void main(String[] args) {
int a = 3;
int b = 10;
System.out.println(a);
System.out.println(b);
changNum(a, b);
System.out.println(a);
System.out.println(b);
}
출력 값
: 3
10
----- 매소드 실행 후----
3
10
(2) 참조 변수의 경우
매소드에서 나온 뒤에서 매소드의 계산이 참조 변수에 영향을 준다.
해당 매소드에 값을 가르키는 주소가 들어감. 값이 계속 변화해도 주소는 항시 그 값을 가르킴.
이는 업데이트된 내용을 매소드가 끝나도 주소를 따라가면 볼 수 있게 만듦.
예시 : 서교 푸르지오 301동 803호라는 집이 리모델링 하고 있다. 우리는 리모델링 전의 집 상태를 주소를 통해 가서 볼 수 있고, 리모델링 후의 모습도 주소를 따라 가면 볼 수 있다.
//위의 Camera 객체 예시에서 이어서
changName(c2);
System.out.println(c1.name);
System.out.println(c2.name);
public static void changName(Camera camera) {
camera.name = "잘못된 카메라";
}
//출력 값
: 잘못된 카메라
잘못된 카메라
'Language > Java' 카테고리의 다른 글
[JAVA]열거형 (0) | 2023.01.29 |
---|---|
[JAVA]final (0) | 2023.01.29 |
[JAVA] Super (0) | 2023.01.28 |
일반 변수와 참조 변수 바로 알기 (0) | 2023.01.28 |
[JAVA] 다형성(polymorphis) (0) | 2023.01.28 |