객체가 메소드로 매개 변수로 전달되면이 메소드는 객체의 속성을 변경하고 변경된 결과를 반환 할 수 있습니다. 그렇다면 여기에서 값 패스 또는 참조 패스입니까?
답 : 가치 전송입니다. Java 프로그래밍 언어는 값의 매개 변수 만 전달합니다. 객체 인스턴스가 매개 변수로 메소드로 전달되면 매개 변수의 값은 객체 참조 사본입니다. 동일한 객체를 가리키면 호출 된 메소드에서 객체의 내용을 변경할 수 있지만 객체의 참조 (참조 사본이 아님)는 결코 변경되지 않습니다.
Java 매개 변수는 원시 유형이든 기준 유형이든 모든 사본을 전달합니다 (또 다른 말은 값을 전달하는 것이지만 사본을 전달하는 것이 일반적으로 전달 주소와 관련이 있음을 이해하는 것이 좋습니다).
매개 변수 유형이 원시 유형 인 경우 전달 된 것은이 매개 변수의 사본, 즉 이전에 언급 된 전달 된 값과 동일한 원래 매개 변수의 값입니다. 함수에서 사본 값이 변경되면 원래 값이 변경되지 않습니다.
매개 변수 유형이 참조 유형 인 경우이 참조 매개 변수의 사본이 전달 되고이 사본은 매개 변수의 주소를 저장합니다. 이 사본의 주소가 함수에서 변경되지 않았지만 주소의 값이 변경되면 함수 내의 변경이 전달 된 매개 변수에 영향을 미칩니다. 사본의 주소가 새 기능과 같은 기능에서 변경되면 사본은 새 주소를 가리 킵니다. 이 시점에서 들어오는 매개 변수는 여전히 원래 주소를 가리키므로 매개 변수의 값이 변경되지 않습니다.
예:
public class paramtest {public static void main (string [] args) { / ** * 테스트 1 : 메소드 숫자 매개 변수를 수정할 수 없습니다 * / system.out.println ( "삼중 값 테스트 :"); 이중 % = 10; System.out.println ( "전 : % =" + %); 삼중 값 ( %); System.out.println ( "이후 : 백분율 =" + %); /** * 테스트 2 : 메소드는 객체 매개 변수 상태를 변경할 수 있습니다 */system.out.println ( "/ntesting triplesalary :"); 직원 Harry = 신입 사원 ( "Harry", 50000); System.out.println ( "이전 : Salary =" + Harry.getSalary ()); 트리플 살리 (Harry); System.out.println ( "After : Salary =" + Harry.getSalary ()); /** * 테스트 3 : 메소드는 새 객체를 객체 매개 변수에 첨부 할 수 없습니다. */system.out.println ( "/ntesting swap :"); 직원 A = 신입 사원 ( "Alice", 70000); 직원 B = 신입 사원 ( "Bob", 60000); System.out.println ( "전 : a =" + a.getName ()); System.out.println ( "전 : B =" + B.getName ()); 스왑 (a, b); System.out.println ( "이후 : a =" + a.getName ()); System.out.println ( "이후 : b =" + b.getname ()); } private static void swap (직원 x, 직원 y) {Employee temp = x; x = y; y = 온도; System.out.println ( "메소드의 끝 : x =" + x.getname ()); System.out.println ( "메소드 끝 : y =" + y.getname ()); } private static void triplesalary (Employee x) {x.raisesalary (200); System.out.println ( "방법 끝 : Salary =" + x.getSalary ()); } private static void triplevalue (double x) {x = 3*x; System.out.println ( "메소드의 끝 x ="+x); }}결과 표시 :
삼중 값 테스트 : 전 : 백분율 = 10.0end의 메소드 x = 30.0 end : percent = 10.0testing triplesalary : precone : salary = 50000.0end : Salary = 150000.0after : Salary = 150000.0testing swap : a = alicebe -orde : b = bob elic worder : swepter : A = Alice // 참조 자체는 다음에 교환되지 않습니다. B = Bob
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.