call by value

  • 기본형을 매개인자로 사용하는 경우
  • 값 복사
       

 

 

 

  • 결국, int n = a;

 

 

 

 

 

 

 

 

 

call by reference

  • 참조형을 매개인자로 사용하는 경우
  • 주소값복사 -> 같은 객체를 공유
		int[] arr = {1,2,3};
		study.test2(arr);
		System.out.println(Arrays.toString(arr));{1,200,3}

	}
	public void test2(int[] brr) {
		brr[1] *= 100;
		System.out.println(Arrays.toString(brr));//{1,200,3}
		
	}
  • 복사된 arr -> brr[1]에 100을 곱하여 200을 만듬

 

  • 그 후 brr출력  리턴시 call stack 영역 test2삭제  arr출력시 값이 복사된 arr[1]역시 200 그대로 출력(얇은복사 처럼된다)

 

 

 

 

 

 

 

//예외상황

		String str ="안녕";
		study.test3(str);
		System.out.println(str);
	}
    
	public void test3(String s) {
		s += "잘가";
		System.out.println(s);
	}
  • test3공간에 str주소값을 s에 전달
  • 이 때 str주소값에 담긴 "안녕"이    +="잘가"만나 str주소값"안녕잘가"가 되는것이 아닌
  • 새로운 주소에 "안녕잘가" 생성 그 주소가 s로 전달

 

 

 

매개인자가 여러개면 그 타입에 따라 각각(call by value, call by reference)달라진다