java 方法的参数传递

时间:2021-09-20 21:25:16
 package book.oo;public class PassParamter {public PassParamter() {}public void methodA(ComplexNumber comNum) {// comNum这个引用指向了一个新new出来的对象。comNum = new ComplexNumber(1, 2);}public void methodB(ComplexNumber comNum) {// comNum这个引用指向的还是同一个对象,但是,这里修改该对象的值。comNum.setRealPart(1);comNum.setRealPart(2);}public void methodC(int num) {// 将num的值加1num++;}public static void main(String[] args) {PassParamter test = new PassParamter();ComplexNumber comNum = new ComplexNumber(5, 5);System.out.println("调用methodA方法之前,comNum: " + comNum.toString());test.methodA(comNum);System.out.println("调用methodA方法之后,comNum: " + comNum.toString());System.out.println("调用methodB方法之前,comNum: " + comNum.toString());test.methodB(comNum);System.out.println("调用methodB方法之后,comNum: " + comNum.toString());int num = 0;System.out.println("调用methodC方法之前,num: " + num);test.methodC(num);System.out.println("调用methodC方法之后,num: " + num);// 调用methodA方法之前,comNum: 5.0 + 5.0i// 调用methodA方法之后,comNum: 5.0 + 5.0i// 调用methodB方法之前,comNum: 5.0 + 5.0i// 调用methodB方法之后,comNum: 2.0 + 5.0i// 调用methodC方法之前,num: 0// 调用methodC方法之后,num: 0/** * Java的参数传递策略: * 0,所谓传值的意思是:在调用方法时,将参数的值复制一份,方法里面用复件,方法外面用原件,复件改变了,不影响原件;原件改变了,不影响复件。 * 1,对于基本数据类型,比如int,long等类型,采用传值的策略。将参数的值复制一份后传给方法,方法可以改变参数值的复件,但不会改变参数值的原件。 * 2,对于对象类型,也采用的传值策略,不过,是将参数的引用复制(2个引用指向同一个对象)一份传给方法,方法可以改变参数引用的复件,但不会改变参数引用的原件。 * * 解释三个输出: * 1,调用methodA方法时,首先将comNum对象的引用复制一份,将引用的复件传递给methodA方法,main方法保持引用的原件,此时,引用原件和引用复件都指向comNum对象。 * 执行comNum = new ComplexNumber(1,2);语句后,将引用复件指向了另外一个新的对象,此时,引用复件和引用原件指向的是不同的对象。回到main方法时,操作的仍然是引用原件指向的comNum对象。 * 2,调用methodB方法时,首先将comNum对象的引用复制一份,将引用的复件传递给methodB方法,main方法保持引用的原件,此时,有引用原件和引用复件都指向comNum对象。 * 执行comNum.setRealPart(1);comNum.setRealPart(2);语句后,修改了引用复件所指对象的内容,而此时,引用复件和引用原件指向的是同一个对象,因此,引用原件指向的对象的内容也改变了。回到main方法时,comNum对象也改变了。 * 3,调用methodC方法时,首先将num的值复制一份,将值的复件传递给methodC方法,main方法保持值的原件。 执行num * ++;语句后,复件的值会加1。回到main方法时,操作的仍然是原件,值保持不变。 */}}