객체가 메소드에 매개변수로 전달되면 메소드는 객체의 속성을 변경하고 변경된 결과를 반환할 수 있습니다. 그러면 값으로 전달됩니까, 아니면 참조로 전달됩니까?
답변: 값 전송입니다. . Java 프로그래밍 언어에는 값 전달 매개변수만 있습니다. 객체 인스턴스가 메서드에 매개 변수로 전달되면 매개 변수의 값은 객체 참조의 복사본입니다. 동일한 개체를 가리키면 호출된 메서드에서 개체의 내용이 변경될 수 있지만 개체에 대한 참조(참조의 복사본이 아님)는 변경되지 않습니다.
Java 매개변수는 기본 유형이든 참조 유형이든 복사본으로 전달됩니다(값에 의해 전달된다고 말하는 또 다른 방법이 있지만 매개변수에 의해 전달된다고 하면 이해하기 더 쉽습니다. 값으로 전달하는 것은 일반적으로 주소로 전달하는 것과 관련이 있습니다).
매개변수 유형이 기본 유형인 경우 전달되는 것은 매개변수의 복사본입니다. 이는 원래 매개변수의 값입니다. 이는 앞서 설명한 값 전달과 동일합니다. 함수 내에서 복사본 값을 변경해도 원래 값은 변경되지 않습니다.
매개변수 유형이 참조 유형인 경우 전달되는 것은 참조 매개변수의 복사본이며 이 복사본은 매개변수의 주소를 저장합니다. 이 복사본의 주소가 함수에서 변경되지 않았지만 주소의 값이 변경된 경우 함수 내 변경 사항은 전달된 매개 변수에 영향을 미칩니다. new 등 함수에서 복사본의 주소가 변경되면 복사본은 새 주소를 가리키며, 이때 전달된 매개변수는 여전히 원래 주소를 가리키므로 매개변수의 값은 변경되지 않습니다. .
예:
public class ParamTest { public static void main(String[] args){ /** * Test 1: Methods can't modify numeric parameters */ System.out.println("Testing tripleValue:"); double percent = 10; System.out.println("Before: percent=" + percent); tripleValue(percent); System.out.println("After: percent=" + percent); /** * Test 2: Methods can change the state of object parameters */ System.out.println("\nTesting tripleSalary:"); Employee harry = new Employee("Harry", 50000); System.out.println("Before: salary=" + harry.getSalary()); tripleSalary(harry); System.out.println("After: salary=" + harry.getSalary()); /** * Test 3: Methods can't attach new objects to object parameters */ System.out.println("\nTesting swap:"); Employee a = new Employee("Alice", 70000); Employee b = new Employee("Bob", 60000); System.out.println("Before: a=" + a.getName()); System.out.println("Before: b=" + b.getName()); swap(a, b); System.out.println("After: a=" + a.getName()); System.out.println("After: b=" + b.getName()); } private static void swap(Employee x, Employee y) { Employee temp = x; x=y; y=temp; System.out.println("End of method: x=" + x.getName()); System.out.println("End of method: y=" + y.getName()); } private static void tripleSalary(Employee x) { x.raiseSalary(200); System.out.println("End of method: salary=" + x.getSalary()); } private static void tripleValue(double x) { x=3*x; System.out.println("End of Method X= "+x); } }
표시 결과:
Testing tripleValue: Before: percent=10.0 End of Method X= 30.0 After: percent=10.0 Testing tripleSalary: Before: salary=50000.0 End of method: salary=150000.0 After: salary=150000.0 Testing swap: Before: a=Alice Before: b=Bob End of method: x=Bob //可见引用的副本进行了交换 End of method: y=Alice After: a=Alice //引用本身没有交换 After: b=Bob
도움을 주셔서 감사드리며, 모두가 PHP 중국어 웹사이트를 방문하시기 바랍니다.
Java 값 전달 및 참조 전달에 대한 자세한 내용은 PHP 중국어 웹사이트를 참고하세요!