change 메서드를 호출할 때, d.x의 값을 매개변수로 복사만 할 뿐 d.x의 값 자체를 바꿀 수 없다.
System.out.println("main() : x = " + d.x);
println이 호출 되기 전, 괄호 안에 있는 연산이 먼저 수행 ➡ d.x가 먼저 읽힌다.
class Data { int x; }
class Ex6_6 {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + 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);
}
}
참조형 매개변수
change 메서드를 호출할 때, 객체 주소 값을 매개변수로 복사하기 때문에 d.x의 값을 변경할 수 있다.
class Data2 { int x; }
class Ex6_7 {
public static void main(String[] args) {
Data2 d = new Data2();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d);
System.out.println("After change(d)");
System.out.println("main() : x = " + d.x);
}
static void change(Data2 d) { // 참조형 매개변수
d.x = 1000;
System.out.println("change() : x = " + d.x);
}
}
참조형 반환타입
반환 타입이 참조형이면 객체의 주소를 반환
class Data3 { int x; }
class Ex6_8 {
public static void main(String[] args) {
Data3 d = new Data3();
d.x = 10;
// copy()
// 1. static 키워드가 붙어있는 메서드이기 때문에 객체 생성 없이도 메서드 호출 가능
// 2. 같은 클래스 내에 있는 메서드이기 때문에 객체 생성 없이도 메서드 호출 가능
Data3 d2 = copy(d);
System.out.println("d.x ="+d.x);
System.out.println("d2.x="+d2.x);
}
static Data3 copy(Data3 d) {
Data3 tmp = new Data3();
tmp.x = d.x;
return tmp; // 복사한 객체의 주소를 반환한다.
}
}