Java Call by value와 Call by reference

박은빈·2023년 4월 23일
0

자바

목록 보기
18/25

Call by value

다음과 같은 메서드가 있다

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

이 메서드는 두 개의 int형 인수를 받아서 서로 교환을 하는 메서드이다
해당 메서드는 아래와 같이 실행할 수 있다

int x = 3, y = 5;
swap(x, y);

하지만 이 메서드는 값에 의한 호출 방식을 사용하므로, 인수로 전달된 변수 x와 y의 값은 메서드 내부에서 복사된 값으로 대체되어 처리된다. 따라서 이 메서드를 호출한 후에도 변수 x와 y의 값은 바뀌지 않는다

printf("%d, %d",x, y); // 3, 5

Call by reference

이번에는 밑에 코드를 보자

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

이 메서드는 두 개의 정수형 포인터를 받아서, 이들이 가리키는 변수의 값을 서로 교환한다 이 메서드를 호출할 때는 다음과 같은 방법으로 호출할 수 있다

int x = 3, y = 5;
swap(&x, &y);

이 메서드는 참조에 의한 호출 방식을 사용하므로, 인수로 전달된 변수 x와 y의 메모리 주소가 메서드 내부의 포인터 변수 a와 b에 전달됩니다. 따라서 이 메서드를 호출한 후에는 변수 x와 y의 값이 서로 바뀐다

printf("%d, %d",x, y); // 5, 3

자바의 메서드 호출 방식

자바의 경우, 항상 call by value로 값을 넘긴다.

자세한건 아래 사이트 참고
https://gyoogle.dev/blog/computer-language/Java/Call%20by%20value%20&%20Call%20by%20reference.html

profile
안녕하세요

0개의 댓글