-Call by Reference : 매개 변수의 원래 주소에 값을 저장하는 방식. 클래스 객체를 인수로 전달한 경우
-Call by Value : 인수로 기본 데이터형을 사용. 주어진 값을 복사하여 처리하는 방식. method 내의 처리 결과는 method 밖의 변수에 영향을 미치지 않는다.
1) Call by Value
public class CallBy {
//call by value (값에 의한 호출.)
static void print(int a) {
a = 20;
System.out.println(a + ">>>");
}
public static void main(String[] args) {
int a = 10;
print(a);
System.out.println(a+"<<<");
/* 이름은 같지만 다른 것.
* 그렇기 때문에 위 메소드에서 바꾼다고 해서 아래에서 적용이 되지 않는다.
*/
}
}
결과
2) Call by Reference
public class CallBy {
//call by reference(address), 주소값에 의한 호출
static void print(int[] a) { /*참조변수,주소값만 복사된 것이기에 이것을 얕은복사라고도 함.
배열까지 복사됐으면 깊은복사.
*/
System.out.println("배열 출력 >>> 레퍼런스 값이 int a에 저장");
//번지값
a[0]=100;
a[1] = 200;
for (int n : a) {
System.out.print(n+"\t");
}
}
public static void main(String[] args) {
int[] arr = {10,20,30,40,50,60};
//a 0번째 요소를 바꾸는 것은 ↑ 위의 배열 arr 10을 바꾸라는 것.
print(arr);
System.out.println("\n");
System.out.println(arr+"배열로 받았을 때");
System.out.println();
for (int n : arr) {
System.out.print(n+"\t");
}
}
}