///
Search
✍️

call by value, call by reference

태그
JAVA

값에 의한 호출

메서드 호출 시에 사용되는 인자의 메모리에 저장되어 있는 값을 복사하여 보낸다.
int a = 1; // 변수가 존재한다면 0x0001 의 주소를 주는게 아닌 1이라는 값을 보낸다. add(a); // 1을 받음
Java
복사

참조에 의한 호출

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

자바는?

call by value 방식으로 인자값을 받는다.

call by value 예시

public static void main(String[] args) { String a = "김치"; String b = "호호잇"; System.out.println("before"); System.out.println(String.format("a value : %s", a)); System.out.println(String.format("b value : %s", b)); swap(a,b); System.out.println("after"); System.out.println(String.format("a value : %s", a)); System.out.println(String.format("b value : %s", b)); } static void swap(String x, String y){ String tmp = x; x = y; y = tmp; } result before a value : 김치 b value : 호호잇 after a value : 김치 b value : 호호잇 //분명 위치를 바꿧는데 바뀌지 않았다.
Java
복사
왜 이럴까?
swap() 메서드 호출 시에 사용한 인자 a,b는 sawp메서드 내부의 매개변수 x,y는 서로 다르기 때문이다.

call by reference 예시

public class Main { String value; public Main(String value) { this.value = value; } public static void main(String[] args) { String var1 = "김치"; String var2 = "호호잇"; Main a = new Main(var1); Main b = new Main(var2); System.out.println("before"); System.out.println(String.format("a value : %s", a.value)); System.out.println(String.format("b value : %s", b.value)); swap(a,b); System.out.println("after"); System.out.println(String.format("a value : %s", a.value)); System.out.println(String.format("b value : %s", b.value)); } static void swap(Main x, Main y){ String tmp = x.value; x.value = y.value; y.value = tmp; } } result before a value : 김치 b value : 호호잇 after a value : 호호잇 b value : 김치
Java
복사
변경전
변경후