[3단원]참조 변수의 복사

  • 변수에 값을 저장하는 방식에는 값에 의한 호출(Call By Value)참조에 의한 호출(Call By Reference) 로 구분됨.

기본 자료형 변수의 복사 : Call By Value

public class CallByValue {
  public static void main(String[] args) {
    int a = 10;
    int b = a;
    b = 20;
    System.out.println(a); // 10
    System.out.println(b); // 20
  }
}
  • 변수 a 에 10을 대입하고
  • b에 해당 값을 복사한 다음에 ( 10 할당 )
  • b에 20 대입
  • a 는 10 출력
  • b는 20 출력
  • 기본 자료형의 변수의 경우 단순히 값만 할당되기에,

    int b = a; 로 할당해도, 10의 값이 할당됨.

객체 참조변수와 Call By Reference

public class CallByReference {
  public static void main(String[] args) {
    Animal ref_a = new Animal();
    Animal ref_b = ref_a;

    ref_a.age = 10;
    ref_b.age = 20;

    System.out.println(ref_a.age); // 20
    System.out.println(ref_b.age); // 20
  }
}
class Animal{
	public int age;
}
  • Animal 클래스를 선언하고, 참조하는 변수 ref_aref_b 가 있음.
  • ref_aref_b 는 같은 객체를 참조하고 있기에, 하나를 변경하면 다른 하나도 영향을 받게 된다.
  • 메모리 상황
    • 두 참조 변수는 같은 객체를 가리킨다. (0x100)
    • 그래서 하나가 변경되면, 결국 같은 주소를 바라보기에 age도 같은 값이 출력되는 것임.

본질적 차이는 없음.

  1. 값과 주소의 해석
    • Call By ValueCall By Reference 차이는 사실상 없는편.
    • 기본 자료형 변수는 값을
      • 으로 해석
    • 객체 참조 변수는 값을
      • 주소 로 해석하는 차이만 있음.
  1. 메모리 상의 해석
    • 두 가지 스택 메모리를 비교해보면
    • 결국 변수가 가진 자체가 복사된다는 것을 알 수 있음.
    • 단순히 을 어떻게 해석하느냐에 차이점일 뿐이다.

값 자체로 해석하느냐 , 주소값으로 해석하느냐 의 차이뿐


Uploaded by N2T