반응형
public class Ex2 {
public static void main(String[] args) {
/*
* 메서드 호출 시 값 전달 방식에 따른 차이
* =메서드 파라미터로 기본 데이터타입과 참조데이터타입 전달 시 차이
*/
Money m = new Money();
PassByTest pbt = new PassByTest();
// 1. 메서드 파라미터로 기본 데이터타입 변수 값을 전달할 경우
System.out.println("changePrimitiveType()메서드 호출 전 money =" + m.money);
pbt.changePrimitiveType(m.money);
System.out.println("changePrimitiveType()메서드 호출 후 money =" + m.money);
// 호출된 메서드에서 전달받은 데이터(복사한 실제 데이터)를 변경하더라도
// 원본 데이터에는 아무런 영향이 없다! (= 10000원이 그대로 존재함)
System.out.println("===============================");
// 2. 메서드 파라미터로 참조 데이터타입 변수 값을 전달할 경우
System.out.println("changeReferenceType()메서드 호출 전 money =" + m.money);
pbt.changeReferenceType(m);// Money 인스턴스의 주소 복사됨
System.out.println("changeReferenceType()메서드 호출 후 money =" + m.money);
}
}class PassByTest {
public void changePrimitiveType(int money) {
// 기본 데이터타입 데이터(실제 값)을 전달받음(복사)
// 전달받은 기본 데이터타입 데이터를 변경
money -=5000;
System.out.println("changePrimitiveType() 메서드의 money= " + money);
}
public void changeReferenceType(Money m) {
m.money-=5000;
System.out.println("changeReferenceType() 메서드의 money= " + m.money);
}
}
class Money {
int money = 10000;
}
/*
changePrimitiveType()메서드 호출 전 money =10000
changePrimitiveType() 메서드의 money= 5000
changePrimitiveType()메서드 호출 후 money =10000
===============================
changeReferenceType()메서드 호출 전 money =10000
changeReferenceType() 메서드의 money= 5000
changeReferenceType()메서드 호출 후 money =5000
*/
반응형
'JAVA' 카테고리의 다른 글
[Java] 생성자 this() (0) | 2021.10.29 |
---|---|
[Java] this 키워드 (0) | 2021.10.29 |
[Java] Variable Arguments(가변형 인자) (0) | 2021.10.29 |
[Java] 생성자 오버로딩(Constructor Overloading) (0) | 2021.10.28 |
[Java] 메서드 오버로딩(Method Overloading) (0) | 2021.10.28 |