자바 가 값 전달 인지 인용 전달 인지 1 문 초 알 아 요.

먼저 프로 그래 밍 언어 에서 파 라 메 터 를 방법(또는 함수)에 전달 하 는 전문 용 어 를 살 펴 보 자.값 호출(callby value)방법 은 호출 자가 제공 하 는 값 을 받 고 호출(callby reference)방법 에 따라 호출 자가 제공 하 는 변수 주 소 를 받 습 니 다.하나의 방법 은 전달 인용 에 대응 하 는 변수 값 을 수정 할 수 있 으 며 전달 값 호출 에 대응 하 는 변수 값 을 수정 할 수 없습니다. 그것 은 각종 프로 그래 밍 언어(자바 뿐만 아니 라)의 방법 적 매개 변수 전달 방식 을 묘사 하 는 데 쓰 인 다.
자바 프로 그래 밍 언어 는 항상 값 에 따라 호출 된다.즉,방법 은 모든 매개 변수 값 의 복사 본 을 얻 었 다.즉,방법 은 그 에 게 전 달 된 모든 매개 변수 변수의 내용 을 수정 할 수 없다.
다음은 세 가지 예 를 들 어 설명 을 드 리 겠 습 니 다.
example 1

public static void main(String[] args) {
 int num1 = 10;
 int num2 = 20;
 
 swap(num1, num2);
 
 System.out.println("num1 = " + num1);
 System.out.println("num2 = " + num2);
}
 
public static void swap(int a, int b) {
 int temp = a;
 a = b;
 b = temp;
 
 System.out.println("a = " + a);
 System.out.println("b = " + b);
}
 
결과:
a = 20
b = 10
num1 = 10
num2 = 20
해석:
example 1
swap 방법 에서 a,b 의 값 을 교환 하면 num 1,num 2 에 영향 을 주지 않 습 니 다.a,b 의 값 은 num 1,num 2 에서 복사 되 었 기 때 문 입 니 다.즉,a,b 는 num 1,num 2 의 사본 에 해당 하고 사본 의 내용 은 아무리 수정 해도 원본 자체 에 영향 을 주지 않 는 다.
위의 예 를 통 해 우 리 는 기본 데이터 형식의 인 자 를 수정 할 수 없 는 방법 을 알 게 되 었 으 며,대상 인용 은 매개 변수 로 서 다 릅 니 다.example 2 를 보십시오.
example 2

public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 };
		System.out.println(arr[0]);
		change(arr);
		System.out.println(arr[0]);
	}
 
	public static void change(int[] array) {
		//            0
		array[0] = 0;
	}
 
결과:
1
0
해석:
example 2
array 는 arr 의 복사 가 초기 화 되 었 습 니 다.즉,array 와 arr 는 같은 배열 의 대상 을 가리 키 는 것 입 니 다.따라서 외부 에서 인용 대상 에 대한 변 화 는 대응 하 는 대상 에 반영 된다.
example 2 를 통 해 우 리 는 대상 의 매개 변수 상 태 를 바 꾸 는 방법 을 실현 하 는 것 이 결코 어 려 운 일이 아니 라 는 것 을 보 았 다.이 유 는 간단 하 다.방법 은 대상 이 인용 한 복사,대상 인용 과 다른 복사 가 같은 대상 을 동시에 인용 하 는 것 이다.
많은 프로 그래 밍 언어(특히 C++와 Pascal)는 두 가지 매개 변 수 를 전달 하 는 방식 을 제공 합 니 다.값 호출 과 참조 호출 입 니 다.일부 프로그래머(심지어 이 책의 저자)는 자바 프로 그래 밍 언어 가 대상 에 대한 인용 호출 이 라 고 생각 하 는데,실제로 이런 이 해 는 옳지 않다.이런 오 해 는 어느 정도 보편성 을 가지 고 있 기 때문에 다음은 반 례 를 제시 하여 이 문 제 를 상세 하 게 논술 한다.
example 3

public class Test {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student s1 = new Student("  ");
		Student s2 = new Student("  ");
		Test.swap(s1, s2);
		System.out.println("s1:" + s1.getName());
		System.out.println("s2:" + s2.getName());
	}
 
	public static void swap(Student x, Student y) {
		Student temp = x;
		x = y;
		y = temp;
		System.out.println("x:" + x.getName());
		System.out.println("y:" + y.getName());
	}
}
결과:
x:샤 오리
장 군
s1:샤 오장
s2:샤 오리
해석:
교환 전:

교환 후:

위의 두 장의 그림 을 통 해 뚜렷하게 볼 수 있다. 방법 은 변수 s1 과 s2 에 저 장 된 대상 인용 을 바 꾸 지 않 았 습 니 다.swap 방법의 매개 변수 x 와 y 는 두 대상 이 인용 한 복사 로 초기 화 되 었 습 니 다.이 방법 은 이 두 복사 입 니 다.
총결산
자바 프로 그래 밍 언어 는 대상 에 대한 인용 호출 이 아니 라 실제 적 으로 대상 인용 은 값 에 따라 전달 된다.
자바 의 방법 적 매개 변수 사용 현황 을 정리 하 겠 습 니 다.
4.567917.하나의 방법 으로 기본 데이터 형식의 매개 변수(즉,수치 형 또는 불 형)를 수정 할 수 없습니다4.567917.한 가지 방법 으로 대상 매개 변수의 상 태 를 바 꿀 수 있다4.567917.하나의 방법 으로 대상 매개 변수 가 새로운 대상 을 인용 하지 못 하 게 합 니 다참고:
기초 지식 제10 판 제4 장 4.5 절
자바 가 값 전달 인지 인용 전달 인지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 값 전달 인지 인용 전달 내용 인지 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기