메서드 호출 시 형식 매개변수에 데이터를 전달하는 과정을 매개변수 전달이라고 합니다. 프로그래밍 언어에는 값에 의한 전송과 참조에 의한 전송이라는 두 가지 전송 모드가 있습니다. 여기서 언급하는 두 가지 전송 방식은 자바에서 사용되는 전송 방식에만 국한되지 않고, 자바를 포함한 많은 프로그래밍 언어에서 나타나는 전송 방식이라는 점을 강조해야 한다.
2. 변수형2 가치 전달
2. 원래 변수
public void change(int b) { b = 7; } @Testpublic void testBasic() {int a = 9; change(a); System.out.println(a); }
매개변수가 전달되면 값 전달 규칙에 따라 변수 b는 리터럴을 가리키는 a의 복사본을 받습니다. value "9":
public void change(String str01) { str01 = "baidu"; } @Testpublic void testString() { String str = new String("www.baidu.com"); change(str); System.out.println(str); }
매개변수가 전달되면 str str01이 힙에 "www.baidu.com"을 저장하는 객체도 가리키도록 자신의 복사본을 str01에 전달합니다.
4.StringBuilder
public void change(StringBuilder builder01) { builder01.append(" World!"); } @Testpublic void testStringBuilder() { StringBuilder builder = new StringBuilder("Hello"); change(builder); System.out.println(builder); }
매개변수 전송이 완료된 후 builder01 변수는 빌더 변수의 복사본을 가져오고 복사본과 원래 변수는 포인트를 가져옵니다. 힙에 있는 동일한 객체에:
public class MyInner {public int a; }public class Test{public void change(MyInner in01) { in01.a = 1; } @Testpublic void testDemain() { MyInner in = new MyInner(); in.a = 9; change(in); System.out.println(in.a); } }
실행 프로세스는 StringBuilder 실행 프로세스와 동일하므로 이겼습니다. 여기서 자세히 설명하지 마세요. 위 코드를 다음과 같이 일부 변경해 보겠습니다.
public class MyInner {public int a; }public class Test{public void change(MyInner in01) { in01=new MyInner();//使in01指向一个新的对象in01.a = 1; } @Testpublic void testDemain() { MyInner in = new MyInner(); in.a = 9; change(in); System.out.println(in.a); } }
实际输出:9
参数传递完成时,in01与in指向同一个对象,in01对对象的操作等同于in对对象的操作,接着在方法内部执行"in01=new MyInner();",这样in01就指向了一个新的对象,in01所有的操作都与in无关了:
综合以上的运行结果与分析,可知java参数传递方式符合值传递。
将变量自身的内存地址传入方法中,方法中的变量指向方法外的变量,在方法中对变量的操作就是对方法外变量的操作。
public class MyInner {public int a; }public class Test{public void change(MyInner in01) { in01=new MyInner();//使in01指向一个新的对象in01.a = 1; } @Testpublic void testDemain() { MyInner in = new MyInner(); in.a = 9; change(in); System.out.println(in.a); } }
实际输出:9
如果采用引用传递,传递完成以后,in01指向in,对in01的操作就是对in的操作,in01指向对象2,那么in也指向对象2,输出1,与实际不符,所以不是采用引用传递。
不再一一分析其他变量类型,分析后可以发现,java在传递参数时采用的不是引用传递,而是值传递。
简单讲,值传递时方法内外是两个拥有同一指向的变量,引用传递时方法内外是同一个变量。
위 내용은 매개변수 전달이란 무엇입니까? 그의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!