Java

Java call by value

승모근뭉치 2023. 1. 26. 13:15

1. 값만 전달

2. 주소(reference)를 전달

===================

 

프로젝트 내 src 내 javabasic 패키지 내 Shop.java

package javabasic;

//상품명, 수량, 단가 멤버 변수
public class Shop {
	private String sang;
	private int su;
	private int dan;

	// setter method
	public void setSang(String sang) {
		this.sang = sang;
	}

	public void setSu(int su) {
		this.su = su;
	}

	public void setDan(int dan) {
		this.dan = dan;
	}

	// getter method
	public String getSang() {
		return this.sang;
	}

	public int getSu() {
		return this.su;
	}

	public int getDan() {
		return this.dan;
	}

	// 수량*단가
	public int getTotal() {
		return su * dan;
	}
}

 

프로젝트 내 src 내 javabasic 패키지 내 Ex9CallBy.java

package javabasic;

public class Ex9CallBy {

	public static void changeInt(int n)// call by value
	{
		System.out.println("전달받은 n값:" + n);
		n = 200;
	}

	public static void changeString(String str)// call by value
	{
		System.out.println("전달받은 s값:" + str);
		str = "java";
	}

	public static void changeArray(int[] arr)// call by reference(모든 배열은 주소가 전달)
	{
		arr[1] = 7;
	}

	public static void changeShop(Shop shop)// call by reference
	{
		System.out.println(shop.getSang() + "\t" + shop.getSu() + "\t" + shop.getDan());
		System.out.println("shop 정보 변경");
		shop.setSang("딸기");
		shop.setDan(3300);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 100;
		changeInt(n);// int 기본형은 값만 전달
		System.out.println("n=" + n);

		String s = "happy";
		changeString(s);
		System.out.println("s=" + s);

		int[] arr = { 3, 5, 1, 2 };
		changeArray(arr);// 주소(reference) 가 전달됨
		for (int a : arr)
			System.out.println(a);

		Shop shop = new Shop();
		shop.setSang("오랜지");
		shop.setSu(2);
		shop.setDan(1500);

		changeShop(shop);
		System.out.println(shop.getSang() + "\t" + shop.getSu() + "\t" + shop.getDan());
	}

}
전달받은 n값:100
n=100
전달받은 s값:happy
s=happy
3
7
1
2
오랜지	2	1500
shop 정보 변경
딸기	2	3300