Call by value
말 그대로
값에 의한 호출 vs 참조에 의한 호출
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("swap() 호출 전 : a = " + a + ", b = " + b);
swap(a, b);
System.out.println("swap() 호출 후 : a = " + a + ", b = " + b);
}
출력결과 :
swap() 호출 전 : a = 10, b = 20
swap() 호출 후 : a = 10, b = 20
값을 바꾼 것은 a,b가 아니라 swap 내부에 생성된 x,y 이므로 a,b의 값은 바뀌지 않았다.
Call by value -> 값만 보낸다
Call by reference
public class CallByReference {
int value;
CallByReference(int value) {
this.value = value;
}
public static void swap(CallByReference x, CallByReference y) {
int temp = x.value;
x.value = y.value;
y.value = temp;
}
public static void main(String[] args) {
CallByReference a = new CallByReference(10);
CallByReference b = new CallByReference(20);
System.out.println("swap() 호출 전 : a = " + a.value + ", b = " + b.value);
swap(a, b);
System.out.println("swap() 호출 전 : a = " + a.value + ", b = " + b.value);
}
}
출력결과:
swap() 호출 전 : a = 10, b = 20
swap() 호출 전 : a = 20, b = 10
Call by Reference 는 참조값(인스턴스) 를 넘겨 주어서 인스턴스 내의 값을 직접적으로 변경하기 때문에 값이 바뀐다.
라고 생각하면 이해하기 쉽다.
참조사이트:
https://re-build.tistory.com/3
'정리하기 이전 자료 ( before 20-11 ) > Java' 카테고리의 다른 글
배열 ( Array ) (0) | 2020.03.27 |
---|---|
Singleton Pattern (0) | 2020.03.25 |
StringBuilder (0) | 2020.03.23 |
Buffered Reader/Writer (0) | 2020.03.16 |
자바 8 Optional (0) | 2020.03.11 |
댓글