기본 자료형 변수를 복사하는 경우 Call By Value(값에 의한 호출)에 이해 그 값이 복사되며 두 개의 변수는 서로에게 영향을 주지 않는다.
예) Call By Value
package reference;
public class CallByValue{
public static void main(String args[]){
int a = 10;
int b = a;
b = 20;
System.out.println(a); // 10
System.out.println(b); // 20
}
}
위의 코드를 보면 a와 b는 아무런 관련이 없다는 것을 알 수 있다.
그렇다면 기본 자료형이 아닌 객체를 저장하고 있는 객체 참조 변수를 복사하는 경우는 어떨까???
이 경우를 흔히 Call By Reference(참조에 의한 호출)이라고 설명한다.
예) Call By Reference
package reference;
public class CallByReference{
public static void main(String[] args){
Animal ref_a = new Animal();
Animal ref_b = ref_a;
ref_a.age = 10;
ref_b.age = 20;
System.out.println(ref_a.age); // 20
System.out.println(ref_b.age); // 20
}
}
class Animal{
public int age;
}
Call by Values(값에 의한 호출)의 경우 기본 자료형 변수는 저장하고 있는 값을 그 값 자체로 해석하는 반면,
Call by Reference(참조에 의한 호출)의 경우 객체 참조 변수는 저장하고 있는 값을 주소로 해석한다는 차이가 있을 뿐이다.
Call by Values, Call by Reference의 예시 코드를 T메모리로 분석하면 좀 더 쉽게 이해할 수 있다.
따라서 Call by Values, Call by Reference를 비교해 보면 결국 변수가 가진 값이 그대로 복사된다는 것은 같지만 그 값을 값 자체로 해석하느냐 아니면 주소값으로 해석하느냐의 차이가 있다는 것을 알 수 있다.