

JAVA의 경우
Call by Value동작방식 :원시 자료형(int, short, long, float, double, char, boolean)Call by Reference동작방식 :참조 자료형(Array, Class, Instance)
void func(int n) {
n = 20;
}
void main() {
int n = 10;
func(n);
printf("%d", n);
}
> 결과값 : 10
void func(int *n) {
*n = 20;
}
void main() {
int n = 10;
func(&n);
printf("%d", n);
}
> 결과값 : 20
C/C++ : 생성한 변수마다 새로운 메모리 공간을 할당하고 값을 덮어씌우는 형식으로 값을 할당. (*(변수) : 포인터를 사용한다면, 같은 주소값을 가리킬 수도 있다.)
JAVA : 생성한 변수마다 새로운 메모리 공간을 할당(여기까지는 C/C++과 공통점), 다만 그 메모리 공간에 값을 저장하지 않고 '''주소값'''을 저장한다. (값은 다른 메모리 공간에 할당됨) -> 변수 값을 수정할 때도, 주소값이 덮여쓰이기 때문에 원본 값에는 전형 영향이 가지 않는 것이다.
Call by value의 경우, 데이터 값을 복사해서 함수로 전달하기 때문에 원본의 데이터가 변경될 가능성이 없다. 하지만 인자를 넘겨줄 때마다 메모리 공간을 할당해야해서 메모리 공간을 더 잡아먹는다.
Call by reference의 경우, 메모리 공간 할당 문제는 해결했지만, 원본 값이 변경될 수 있다는 위험이 존재한다.