Call by value
Call by reference
Java 는 오직 Call by Value 로만 동작한다.
Java 에서 변수를 선언하면 Stack 영역에 할당됩니다.
원시 타입 (Primitive Type) 은 Stack 영역에 변수와 함께 저장되며
참조 타입 (Reference Type) 객체는 Heap 영역에 저장되고 Stack 영역에 있는 변수가 객체의 주소값을 갖고 있습니다.
원시타입이란?
참조타입이란?

- 값에 의한 호출
- 메서드를 호출할 때 값만을 전달하기 때문에 수신자의 파라미터를 수정해도 호출자의 변수에는 아무런 영향이 없다.
- 메서드를 호출 할 때 값을 넘겨주기 때문에 Pass by Value라고도 부른다.
public class CallbyValue {
public static void change(int x, int y) {
x = 3;
y = 4;
}
public static void main(String [] args) {
int a = 1;
int b = 2;
System.out.println("a = " + a + ", b = " +b);
change(a,b);
System.out.println("a = " + a + ", b = " +b);
}
}
//코드 결과 - 바뀌지 않음
a = 1, b = 2
a = 1, b = 2
- 참조에 의한 호출이기 때문에 변수와 수신자의 파라미터는 완전히 동일한 변수이다.
- 메서드 내에서 파라미터를 수정하면 그대로 원본 변수에도 반영된다.
- Pass By Reference라고도 부른다.
public class CallbyReference {
public static void change(Test test) {
test.value = 10;
}
public static void main(String [] args ) {
Test test = new Test();
System.out.println("test's value : "+test.value);
change(test);
System.out.println("test's value : "+test.value);
}
}
//코드 결과 - 바뀜
test's value : 0
test's value : 10

🙇♀️참고 사이트🙇♀️
https://bcp0109.tistory.com/360 https://sudo-minz.tistory.com/91 https://devlog-wjdrbs96.tistory.com/44 https://velog.io/@sinclebear/Javascript-Call-by-Value-vs.-Call-by-Reference-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%AC-vs.-%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%AC https://jminc00.tistory.com/8