Call by Value , Call by reference

jaranda·2021년 11월 2일
0

실제 자바는 Call by Value 뿐이다.

Call by Value 는 값을 넘기는 것
Call by Reference 는 주소를 넘기는 것 이다

swap 으로 알아보기

예시 1    Call by Value 


같은 이유 : main 에서 만든 변수 a,b 의 주소가 각각 x, y 라고 했을때 
swap() 로 넘겨져서 메서드가 수행되는 동안 사용되는 변수들은 swap() 내부에 새로생긴 a,b 이기 때문에 기존 x,y 의 주소와 다르다.  때문에 다른 주소에서 swap를 해봤자. 기존에 main의 a,b 값은 그대로다.

예시 2 Call by reference


바뀐 이유 : 메인에서 선언된 CallTest 타입의 변수 a,b 는 각각 객체를 생성하여 x,y 주소에 저장된 1,2 의 주소값을 저장하게 된다. 이후 swap() 는 1,2가 저장된 주소를 참조하여 연산하기 때문에 원본데이터가 변하게 된다. 

Call byreference 는 메서드 호출 시 사용되는 인자 값의 메모리에 저장되어있는 주소를 복사하여 보낸다. 

실제 자바는 Call by Value 뿐이다.

라고 볼 수 있는 이유는 결국 주소값을 넘기기 때문이다. 

참고
https://wikidocs.net/265
http://dhplanner.blogspot.com/2009/11/java-%EC%97%90%EC%84%9C%EC%9D%98-call-by-value-%EC%99%80-call-by.html
https://re-build.tistory.com/3

profile
자라는 개발자

0개의 댓글