JAVA

[Java] 파라미터 전달 방식의 차이(기본데이터타입,참조데이터타입)

sagesse2021 2021. 10. 29. 18:27
반응형
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
*/

 

반응형