Java 는 Call by Value 인가, Call by Reference 일까에 대해서 다시 한번 생각해 보았습니다.
package org.demo.lab;
import net.minidev.json.JSONUtil;
class A{
public int value;
public A(int value) {
this.value = value;
}
@Override
public String toString() {
return "A{" +
"value=" + value +
'}';
}
}
public class callByValue {
public static void main(String[] args) {
A a1 = new A(1);
A a2 = new A(2);
run(a1,a2);
System.out.println("a1 : "+a1.toString());
System.out.println("a2 : "+a2.toString());
}
public static void run(A arg1,A arg2){
arg1.value = 111;
arg2 = arg1;
}
}
arg2에 arg1의 값을 저장한다고 해도 이는 run 메서드 내에 존재하는 arg2가 arg1이 가진 주소값을 복사하여 저장하는 것일 뿐 원본 a2와는 독립된 변수이기 때문에 원본 a2 는 변경 되지 않습니다.
즉, Java 는 기본적으로 모든 전달 방식이 Call By Value 입니다.