1 : 가치로 통과하는 것
메소드가 호출되면 전달 된 매개 변수는 값의 사본으로 전달됩니다. 예는 다음과 같습니다.
공개 클래스 Temptest {private void test1 (int a) {// do do} public static void main (string [] args) {temptest t = new Temptest (); int a = 3; t.test1 (a); // 여기에 전달 된 매개 변수는 값으로 전달되는 것입니다}}가치별로 통과하는 중요한 특성 : 전달되는 것은 값의 사본이며, 이는 통과 후 서로 관련이 없음을 의미합니다.
예는 다음과 같습니다.
공개 클래스 Temptest {private void test1 (int a) {a = 5; System.out.println ( "test1 메소드 a ="+a); } public static void main (string [] args) {temptest t = new Temptest (); int a = 3; t.test1 (a); // 통과 후, test1 메소드의 변수 값의 변화는 a system.out.println ( "main method a ="+a)에 영향을 미치지 않습니다. }}작업의 결과는 다음과 같습니다.
test1 방법 a = 3에서 a = 5 주 방법에서
2 : 참조로 전달되는 것
메소드가 호출되고 전달 된 매개 변수가 참조로 전달 될 때 전달 된 매개 변수를 나타냅니다. 실제로 전달 된 참조 주소는 변수에 해당하는 메모리 공간의 주소입니다.
예는 다음과 같습니다.
공개 클래스 Temptest {private void test1 (a) {} public static void main (String [] args) {temptest t = new Temptest (); A a = 새로운 a (); T.test1 (a); // 여기에 전달 된 매개 변수는 참조별로 전달하는 것입니다}} 클래스 a {public int age = 0; }3 : 참조로 통과하는 중요한 특성
전달되는 것은 값에 대한 참조이며, 이는 전과 후에 동일한 기준 (즉, 동일한 메모리 공간)으로 전달되는 지점을 의미합니다.
예는 다음과 같습니다.
공개 클래스 Temptest {private void test1 (a) {a.age = 20; age = "+a.age system.out.println ("test1 method = "+a.age);} public static void main (string [] args) {temptest t = new temptest (); a = new a (); }} 클래스 A {public int age = 0; }작업 결과는 다음과 같습니다.
Test1 방법에서 Age = 20, 주요 방법에서는 연령 = 20입니다
4 : 참조로 전달되는 프로세스 이해 - 메모리 할당 다이어그램
참조별로 전달되는 프로세스를 올바르게 이해하려면 메모리 할당 프로세스를 이해하는 법을 배워야하며 메모리 할당 다이어그램을 통해이 프로세스를 이해하는 데 도움이 될 수 있습니다.
위의 예제를 사용하여 분석하십시오.
(1) : 실행을 시작하고, 라인 8을 실행하고, 인스턴스를 생성하며, 메모리 할당 다이어그램은 다음과 같습니다.
(2) : 라인 9를 실행하고, 예를 들어 A에 대한 연령 값을 수정합니다. 실행 후 메모리 할당 다이어그램은 다음과 같습니다.
(3) : 기준에 따라 변수 A의 변수 A에 대한 변수 A에 의해 참조 된 메모리 공간 주소를 전달하는 실행 10 라인 10. 참고 :이 두 변수는 완전히 다르며 같은 이름으로 속지 마십시오.
메모리 할당은 다음과 같습니다.
참조로 전달되므로 메모리 공간의 주소가 전달되므로 전송이 완료된 후 형성된 새 메모리 다이어그램은 다음과 같습니다.
다시 말해, 두 변수 모두 같은 공간을 가리 킵니다.
(4) : 3 줄 3을 실행하고 test1 메소드에서 변수 A에 의해 가리키는 인스턴스 A의 연령에 값을 할당합니다. 완료 후 형성된 새로운 메모리 다이어그램은 다음과 같습니다.
현재 인스턴스 A의 연령 값의 변화는 test1 방법으로 인해 발생합니다.
(5) : 라인 4를 실행하고 현재 메모리 다이어그램에 따라 Test1 방법의 출력 연령 = 20
(6) : 라인 11을 실행하고 현재 메모리 다이어그램에 따라 주요 방법에서 출력 연령 = 20
5 : 위의 예에 대한 변경
위의 예를 이해 한 후에는 어떤 사람들은 참조로 전달 된 값이 서로 영향을 미치지 않을 수 있습니까? 주요 방법에 영향을 미치지 않는 TEST1 방법의 수정은 무엇입니까?
이 방법은 test1 메소드에서 새 인스턴스를 사용하는 것입니다. 세 번째 동작이 새로 추가되는 다음 예제로 변경하십시오.
공개 클래스 Temptest {private void test1 (a) {a = new a (); // 새로운 줄 A.age = 20; System.out.println ( "test1 method age ="+a.age); } public static void main (string [] args) {temptest t = new Temptest (); A a = 새로운 a (); a.age = 10; T.test1 (a); System.out.println ( "메인 메소드 age ="+a.age); }} 클래스 A {public int age = 0; }실행 결과는 다음과 같습니다.
테스트 1에서 나이 = 20 메인 방법에서 10 세입니다
이 실행의 결과가 이전 예제와 다른 이유는 무엇입니까? 메모리 다이어그램을 사용하여 이해하는 것이 좋습니다.
6 : 다시 참조로 이해하십시오
(1) : 실행을 시작하고, 라인 9를 실행하고, 인스턴스를 생성하며, 메모리 할당 다이어그램은 다음과 같습니다.
(2) : 런 선 10은 예를 들어 A에 대한 연령 값을 수정하는 것입니다. 실행 후 메모리 할당 다이어그램은 다음과 같습니다.
(3) : Running Line 11은 기본 메소드의 변수 A에 의해 참조 된 메모리 공간 주소를 기준에 따라 변수 A의 변수 A에 전달하는 것입니다. 참고 :이 두 변수는 완전히 다르며 같은 이름으로 속지 마십시오.
메모리 할당은 다음과 같습니다.
참조로 전달되므로 메모리 공간의 주소가 전달되므로 전송이 완료된 후 형성된 새 메모리 다이어그램은 다음과 같습니다.
다시 말해, 두 변수 모두 같은 공간을 가리 킵니다.
(4) : 3 줄 3을 실행하고 test1 메소드에서 변수 A에 대한 새로운 인스턴스를 재생성합니다. 완료 후 형성된 새로운 메모리 다이어그램은 다음과 같습니다.
(5) : run 4를 실행하여 Test1 메소드에서 변수 A에 의해 가리키는 새 인스턴스 A의 연령에 값을 할당합니다. 완료 후 형성된 새로운 메모리 다이어그램은 다음과 같습니다.
참고 : 현재 Test1 메소드의 변수 A의 연령은 변경되고 기본 메소드는 변경되지 않습니다.
(6) : 라인 5를 실행하고 현재 메모리 다이어그램에 따라 Test1 방법의 출력 연령 = 20
(7) : 라인 12를 실행하고 현재 메모리 다이어그램에 따라 출력 메모리 다이어그램 = 10에 따라 주요 방법에서 출력 연령 = 10
7 : 설명
(1) : "Java에서는 매개 변수 전달이 값으로 전달됩니다."수단 : 값을 통과하는 것은 전달 된 값의 사본입니다. 참조별로 통과하면 실제로 참조 주소 값이 전달되므로 통과 값으로 통과합니다.
(2) : Java에서는 다음 정의 방법에 따른 기본 유형과 문자열 만 값으로 전달되고 다른 정의 방법은 참조로 전달됩니다. 이중 인용문을 사용하여 문자열을 직접 정의하는 것입니다. String str = "Java 사립 학교";
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.