매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있다.
반환타입이 참조형이라는 것은 반환하는 값의 타입이 참조형이라는 얘긴데,
모든 참조형 타입의 값은 '객체의 주소'이므로 그저 정수값이 반환되는 것일 뿐 특별할 것이 없다.
예14)
public class ReferenceReturnEx {
public static void main(String[] args) {
Data3 d = new Data3();
d.x = 10;
Data3 d2 = copy(d); // copy 메소드 실행
System.out.println("d.x=" + d.x);
System.out.println("d2.x=" + d2.x);
}
static Data3 copy(Data3 d) {
Data3 tmp = new Data3(); // 새로운 객체 tmp를 생성한다.
tmp.x = d.x; // d.x의 값을 tmp.x에 복사한다.
return tmp; // 복사한 객체의 주소를 반환한다.
}
}
class Data3 {
int x;
}
Data3 d2 = copy(d)는 메인 메소드의 d.
static Data3 copy(Data3 d)의 d는 copy메소드의 d.
메인 메소드의 d 값이 copy메소드의 d값으로 복사된다. 그러면 copy메소드의 d 값이 d.x의 값인 10을 가리킨다.
tmp를 생성해 Data3 객체를 새로 생성한다.
tmp.x = d.x; 의 d.x는 copy메소드의 지역변수d 다. 이 d가 가리키는 값이 10이다. 그래서 tmp.x에 10이 저장된다.
return tmp; 는 0x200을 반환.
반환타입이 참조형이면 객체의 주소를 반환한다.
이 0x200이 copy(d)로 가고 d2에 대입된다. 결국 0x200 이 메인 메소드 d2에 대입되는 것이다.
'JAVA > 객체지향프로그래밍1' 카테고리의 다른 글
[JAVA] 오버로딩(overloading) (0) | 2021.06.21 |
---|---|
[JAVA] 클래스 메서드(static 메서드 )와 인스턴스 메서드 (0) | 2021.06.20 |
[JAVA]기본형 매개변수와 참조형 매개변수 (0) | 2021.06.20 |
[JAVA] 호출 스택(call stack) (0) | 2021.06.20 |
[JAVA] return문 (0) | 2021.06.20 |