반응형
기본형 매개변수
변수의 값을 읽기만 할 수 있음(read only)
참조형 매개변수
변수의 값을 읽고 변경 할 수 있음(read & write)
아래 예제를 통해서 어떤 차이가 있는지 확인해 볼께요!
class Data {int x;}
class ParameterTest{
public static void main(String[] args)
Data d = new Data(); //객체 생성
d.x = 10;
System.out.println("main() : " + d.x);
change(d.x);
System.out.println("After change(d.x)";
System.out.println("main() : x =" + d.x)
}
static void change(int x) { // 기본형 매개변수
x = 1000; //지역변수
System.out.println("change() : x = " + x);
}
}
위 예제 결과는
main() : x = 10
change() : x = 1000
After change(d.x)
main() : x = 10
이 되는데 change 메서드의 지역변수 x에 1000을 저장하고
x의 값이 10에서 1000 으로 변경이 된다.
그래서 change 메서드의 x값은 1000이 된다
- change 메서드가 호출되면 d.x가 change 메서드의 매개변수 x에 복사됨
- change 메서드에서 x의 값을 1000으로 변경
- change 메서드가 종료되면서 매개변수 x는 스택에서 제거됨
class Data {int x;}
class ParameterTest{
public static void main(String[] args)
Data d = new Data(); //객체 생성
d.x = 10;
System.out.println("main() : " + d.x);
change(d.x);
System.out.println("After change(d.x)";
System.out.println("main() : x =" + d.x)
}
static void change(Data d) { // 참조형 매개변수
x = 1000; //지역변수
System.out.println("change() : x = " + x);
}
}
위 예제 결과는
main() : x = 10
change() : x = 1000
After change(d.x)
main() : x = 1000
이 되는데 change 메서드를 호출하면 매개변수로 참조변수 d를 넘겨주게 된다
main 메서드의 참조변수 d의 값(Data 인스턴스의 주소)은 change 메서드의 매개변수 d에 저장이 된다
- change 메서드가 호출되면서 참조변수 d의 값(주소)이 매개변수 d에 복사됨, 매개변수 d에 저장된 주소값으로 x에 접근가능
- change 매서드에서 매개변수 d로 x의 값을 1000으로 변경
- change 메서드가 종료되면서 매개변수 d는 스택에서 제거
참고 : 자바의정석(도서)
반응형
'Programming > Java, Spring' 카테고리의 다른 글
[JAVA] 생성자(Constructor) / 생성자의 조건 /기본 생성자(defualt Constructor) (0) | 2022.05.11 |
---|---|
[JAVA] 오버로딩(overloading)이란?? 메서드 오버로딩 / 오버로딩의 조건 / 오버로딩의 예 (0) | 2022.05.10 |
[JAVA] 클래스 메서드(Static메서드)와 인스턴스 메서드(instance method) (0) | 2022.05.04 |
[JAVA] 메서드(method)란? return문, 메서드 호출 (0) | 2022.05.03 |
[JAVA] 변수란? / 변수의 종류 / 인스턴스, 클래스, 지역 변수 (0) | 2022.05.01 |