[Java]_함수 전 삼 의 의혹 과 사고

2541 단어 자바
문 제 는 leetcode 의 두 문제 Path Sum I & II 에서 유래 하여 각각 두 개의 dfs 를 썼 다.
1 void dfs(TreeNode node , int sum , ArrayList<Integer> curPath)
2 void dfs(TreeNode node , int sum , boolean ifExist)

문제: 1 번 에서 저 는 방법 에서 curPath 를 수정 할 수 있 습 니 다. 함수 호출 을 끝 낼 때 변수 수정 이 유효 합 니 다.
     2 번 문제 에서 저 는 함수 에서 ifExist 를 수정 하 더 라 도 함수 호출 을 끝 낼 때 변수 수정 이 잘못 되 었 습 니 다.
질문: 자바 의 매개 변수 전달 방식 은?
해결: 다음 세 가지 상황 을 고려 합 니 다.
1、
double a = 10;
void tripleValue(double x)
    x = 3 * x;
tripleValue(a);

상기 코드 가 실 행 된 후 a 의 값 은 변 하지 않 습 니 다.결론 1: 방법 은 기본 데이터 형식 (수치 형 과 불 형) 의 인 자 를 수정 할 수 없습니다.
 
2、
Employee a = new Employee("july");
void changeName(Employee x )
  x.name = "alice";
changeName(a);

상기 코드 가 실 행 된 후 a 의 name 속성 은 alice 로 변경 되 었 습 니 다.결론 2: 방법 은 대상 매개 변수의 속성 을 바 꿀 수 있다.
 
3、
Employee a = new Employee("alice");
Employee b = new Employee("bob");
void swap(Employee p1 , Employee p2){
      Employee temp = p1;
      p1 = p2;
      p2 = temp;
}
swap(a , b);

상기 코드 가 실 행 된 후에 도 a 는 alice 이 고 b 는 bob 입 니 다.결론 3: 방법 은 대상 매개 변수 가 새로운 대상 을 인용 하 게 해 서 는 안 된다.
 
따라서 자바 의 함수 전 참 은 모두 값 으로 전 달 됩 니 다.
함수 매개 변 수 를 기본 데이터 형식 으로 할 때 방법 매개 변 수 는 매개 변수 값 의 복사 본 을 받 습 니 다.
함수 매개 변수 가 대상 일 때 방법 매개 변 수 는 매개 변수 주 소 를 복사 하지만 원래 대상 에 대한 참조 도 아 닙 니 다.

좋은 웹페이지 즐겨찾기