
class MyValue{
int value;
public MyValue(int value) {
this.value = value;
}
}
public class Main {
public static void main(String[] args) {
MyValue firstV = new MyValue(10);
MyValue secV = new MyValue(20);
}
public void callByValue(MyValue f, MyValue s) {
f.value = 100;
f = s;
}
}
위 예제를 보면

화살표의 방향대로 흘러가면서 Stack과 Heap 영역에서 객체가 선언 및 초기화되며 Method 영역에서 객체의 상태가 바뀌게 되는 것이고 값이 바뀌는게 아니다.
객체의 값이 바뀌었다면 메서드가 호출된 뒤 주소값이 변경이 되야 참조에 의한 호출인 것인데 자바는 객체의 상태를 핸들링 할 수 있다는 것에서 Call by Reference와 더 헷갈리게 되는 것 같다.