call by value
매개변수에 인자의 값을 그대로 복사하는 함수 호출 방식.
public class Main {
public static void main(String[] args) {
int x = 0;
change(x);
System.out.println(x); // 0
}
static void change(int x) {
x += 1;
}
}

Java는 포인터 개념이 없기 때문에 항상 call by value 방식으로 함수를 호출한다.
인자로 참조형 변수를 넘기는 경우에도 call by value 방식인 것은 동일하다.
class Data {
int x = 0;
}
public class Main {
public static void main(String[] args) {
Data data = new Data();
change(data);
System.out.println(data.x); // 1
}
static void change(Data data) {
data.x += 1;
}
}

매개변수로 data 변수에 대한 참조(= data 변수의 메모리 주소)가 아닌 data 변수의 값(= Data 인스턴스의 메모리 주소)을 넘겼기 때문에 call by reference 방식이 아닌 call by value 방식이 맞다.
call by reference
매개변수에 변수의 포인터를 넘기는 함수 호출 방식.
#include <stdio.h>
void change(int *px) {
*px += 1;
}
int main(void) {
int x = 0;
change(&x);
printf("%d", x);
return 0;
}

'프로그래밍 언어 > Java' 카테고리의 다른 글
접근 제어자와 캡슐화 (0) | 2023.01.07 |
---|---|
JVM, JRE, JDK (0) | 2023.01.04 |
접근 제어자 (0) | 2022.06.03 |
클래스 클래스 (0) | 2022.05.31 |
인텔리제이 단축키 (0) | 2022.05.31 |