728x90
반응형
실제 자바는 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
728x90
반응형
'자라는 재미들 > 코코아' 카테고리의 다른 글
String 의 불변성(immutable) (0) | 2021.11.29 |
---|---|
자바 메모리 구조 (0) | 2021.11.29 |
public static void main(String[] args) 헬로월드! (0) | 2021.11.29 |
BufferedReader (0) | 2021.11.29 |
w1 - day2 - Call by Value , Call by reference (0) | 2021.11.02 |