Post

면접준비 - Java 는 Call by Reference가 없다.

오타, 지적 환영입니다.

개요

이 생각을 하게 된건 단순하다.

C, C++를 학습할 때 swap()를 구현한 적이 다들 한 번씩 있을 것이다.

Call by Value로 넘겼을 때는 인자로 넘긴값이 바뀌지 않고, Call by Reference로 넘긴거에는 값이 바뀌었다.

void swap(int a,int b){
    int temp = a;
    a = b;
    b = temp;

    //는 호출한 인자는 안바뀜.
}

void swap(int* a, int* b){
    int temp = *a;
    *a = *b;
    *b = temp;
    //호출한 곳에서도 바뀜.
}

Java는 포인터가 없어서 위의 swap(int a,int b)로 넘겨도 원본값이 변경 되기에 당연히 Call By Reference인줄 알았다. 근데 아니다.


Call by Reference란?

이를 알기 위해선 정의를 알 필요가 있다.

  • 주소값을 직접 넘기는 것을 Call by Reference라고 한다. 자바는 근데 직접 넘기는것이 아니고 주소 값을 복사해서 넘기기에 Call By Value라고 하는 것이다.

복사된 주소값으로 참조가 가능하니 주소값을 가리키는 객체의 내용이 바뀌는 것이다.

This post is licensed under CC BY 4.0 by the author.