java传递参数采用传值方式
传值方式具体为:将参数的值复制一份,方法里面用复件,方法外用原件,方法中可以改变复件,不影响原件
根据参数类型分为两种不同情况:基本数据类型和对象数据类型
1 package com.jdk7.chapter2; 2 3 /** 4 * java参数传递采用的传值方式 5 * 传值:将参数的值复制一份,方法里面用复件,方法外用原件,方法中可以改变复件,不影响原件 6 * @author celineluo 7 * 8 */ 9 public class PassParamter { 10 public PassParamter(){} 11 12 /** 13 * 对象类型的传值策略是:参数的引用复制一份传给方法,复件引用和原件引用指向同一个对象,方法可以改变参数引用的复件, 14 * 但是不会影响原件引用,即复件引用还可以指向一个新的对象 15 */ 16 17 /** 18 * 调用ComplexNumber类自定义构造函数声明对象实例 19 * @param comn 20 */ 21 public void methodA(ComplexNumber comn){ 22 comn = new ComplexNumber(1,2); //这个复件引用指向了一个新的对象 23 System.out.println(comn.toString()); 24 } 25 26 /** 27 * 调用ComplexNumber类中实例变量Setter方法设置数值 28 * @param comn 29 */ 30 public void methodB(ComplexNumber comn){ 31 comn.setRealPart(1); //这个复件引用和原件引用指向同一个对象,即改变复件引用的值,原件引用的值同步改变 32 System.out.println(comn.toString()); 33 comn.setRealPart(2); 34 System.out.println(comn.toString()); 35 } 36 37 /** 38 * 基本数据类型传值的策略是:将参数值复制一份传给方法,方法可以改变复件,但不影响原件 39 * @param n 40 */ 41 public void methodC(int n){ 42 n++; 43 System.out.println("n = "+n); 44 } 45 46 public static void main(String[] args) { 47 PassParamter test = new PassParamter(); 48 ComplexNumber a = new ComplexNumber(5,6); 49 System.out.println("调用methodA参数传递之前: "+a.toString()); 50 test.methodA(a); 51 System.out.println("调用methodA参数传递之后: "+a.toString()); 52 System.out.println("调用methodB参数传递之前: "+a.toString()); 53 test.methodB(a); 54 System.out.println("调用methodB参数传递之后: "+a.toString()); 55 int b = 0; 56 System.out.println("调用methodC参数传递之前: "+b); 57 test.methodC(b); 58 System.out.println("调用methodC参数传递之后: "+b); 59 60 } 61 62 }
执行结果:
调用methodA参数传递之前: realPart=5.0, imagePart=6.0i
realPart=1.0, imagePart=2.0i
调用methodA参数传递之后: realPart=5.0, imagePart=6.0i
调用methodB参数传递之前: realPart=5.0, imagePart=6.0i
realPart=1.0, imagePart=6.0i
realPart=2.0, imagePart=6.0i
调用methodB参数传递之后: realPart=2.0, imagePart=6.0i
调用methodC参数传递之前: 0
n = 1
调用methodC参数传递之后: 0