>  기사  >  Java  >  Java 매개변수의 값 전달 및 참조 전달 소개(예제 포함)

Java 매개변수의 값 전달 및 참조 전달 소개(예제 포함)

不言
不言원래의
2018-09-25 14:55:122719검색

이 문서에서는 Java 매개변수의 값 전달 및 참조 전달(예제 포함)을 소개합니다. 여기에는 특정 참조 값이 있으므로 도움이 될 수 있습니다.

값 전송: 메소드가 호출되면 실제 매개변수는 해당 값을 해당 형식 매개변수에 전달합니다. 메소드 실행 중 형식 매개변수 값의 변경은 실제 매개변수의 값에 영향을 주지 않습니다.

참조에 의한 전달: 주소에 의한 전달이라고도 합니다. 메소드가 호출되면 실제 매개변수의 참조(매개변수 값이 아닌 주소)가 메소드의 해당 형식 매개변수에 전달됩니다. 메소드 실행 중 형식 매개변수에 대한 연산은 실제로 실제 매개변수에 대한 연산입니다. 매개변수 메소드 실행 중 형식 매개변수 값의 변경은 실제 매개변수 값에 영향을 미칩니다.

a. 값 전달을 위한 데이터 유형: 8가지 기본 데이터 유형 및 문자열(이해할 수 있지만 실제로는 문자열도 전달된 주소이지만 문자열 개체는 다른 개체와 다릅니다. 문자열 개체는 변경할 수 없으며, 콘텐츠 변경은 새 개체를 생성합니다. 그러면 StringBuffer는 괜찮지만 해당 콘텐츠만 변경할 수 없습니다. ​

b. 주소 값 전달을 위한 데이터 유형: 배열, 클래스 및 인터페이스를 포함하여 문자열을 제외한 모든 복합 데이터 유형.

값 전송 예시:

package com.other.test;
public class Test {
public static void change(int i, int j) { 
int temp = i; 
i = j; 
j = temp;
} 
public static void main(String[] args) { 
int a = 3; 
int b = 4; 
change(a, b); 
System.out.println("a=" + a); 
System.out.println("b=" + b);
}
}

출력 결과는 a=3 b=4, 전달된 값은 원래 값을 변경하지 않습니다.

참조 전송 예시: (배열)

package com.other.test;
public class Test {
public static void change(int[] counts) { 
counts[0] = 6; 
System.out.println(counts[0]);
} 
public static void main(String[] args) { 
int[] count = { 1, 2, 3, 4, 5 }; 
change(count);
System.out.println(count[0]);
} 
}

출력 결과는 6 6 또한 참조 값은 원래 값을 변경합니다. 참조 전송의 예: (객체)

A 객체 정의:

package com.other.test;
public class A {
int i = 0;
}

위 객체에 대해 작동하는 클래스:

package com.other.test;
public class Test {
public static void add(A a) { 
//a = new A();   ①
a.i++;
} 
public static void main(String args[]) { 
A a = new A(); 
add(a); 
System.out.println(a.i );
} 
}

①에 주석을 달면 출력 결과는 1 입니다. ①에 주석이 없으면 0입니다. 그 이유는 생성된 새 A 객체가 전달된 객체가 아니기 때문입니다. String의 상황을 보세요

package com.other.test;
public class Test {
String str = new String("old"); 
char[] ch = { 'a', 'b', 'c' }; 
public static void main(String args[]) { 
Test ex = new Test(); 
ex.change(ex.str, ex.ch); 
System.out.print(ex.str + " and "); 
System.out.println(ex.ch);
} 
public void change(String str, char ch[]) { 
str = "new"; 
ch[0] = 'd';
}
}

출력 결과가 old이고 dbc입니다. 즉, String을 전달해도 원래 값이 변경되지 않고 새로운 값이 생성됩니다.

ch[]는 간단한 배열 전송입니다. (객체에는 객체 참조, 즉 객체의 주소와 내용이 포함됩니다.) String은 특별합니다. String 코드를 읽어본 사람이라면 누구나 String이 최종이라는 것을 알 것입니다. 따라서 값은 변경되지 않습니다. 함수에 있는 String 객체 참조의 복사본은 다른 새로운 String 객체를 가리키는 반면, 배열 객체 참조의 복사본은 변경되지 않지만 객체의 데이터 내용을 변경합니다.

객체 유형의 경우. , Object의 서브클래스, 메소드에서 해당 멤버의 값이 수정되면 수정 사항이 적용됩니다. 메소드 호출이 완료된 후 해당 멤버는 새로운 값을 갖게 됩니다. 메서드 호출이 완료되면 원래 값이 변경됩니다. 참조는 새 개체를 가리키지 않습니다.​ ​

Java 매개변수는 기본 유형이든 참조 유형이든 복사본으로 전달됩니다(값으로 전달한다고 말하는 또 다른 방법이 있지만 값으로 전달하면 일반적으로 값으로 전달된다는 점을 이해하는 것이 좋습니다). 주소 기준).​​

매개변수 유형이 원시 유형인 경우 전달되는 것은 매개변수의 복사본입니다. 이는 원래 매개변수의 값입니다. 이는 앞서 논의한 전달 값과 동일합니다. 함수에서 복사본의 값이 변경되면 원래 값은 변경되지 않습니다. 매개변수 유형이 참조 유형인 경우 전달되는 것은 참조 매개변수의 복사본이며 이 복사본은 매개변수의 주소를 저장합니다. . 이 복사본의 주소가 함수에서 변경되지 않았지만 주소의 값이 변경된 경우 함수 내 변경 사항은 전달된 매개 변수에 영향을 미칩니다. new 등 함수에서 복사본의 주소가 변경되면 복사본은 새 주소를 가리키며, 이때 전달된 매개변수는 여전히 원래 주소를 가리키므로 매개변수의 값은 변경되지 않습니다. .

위 내용은 Java 매개변수의 값 전달 및 참조 전달 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.