参数传递小结

来源:互联网 发布:胖胖狗软件 编辑:程序博客网 时间:2024/06/05 16:29

基本的方法参数传递包括两类:

           1.传递基本数据参数。如果参数传递的是基本类型,如int、short、double等,那么该方法会直接获得指定类型的数值,基本类型的数据时值传递,改变它不会影响方法调用者出传递的变量,方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值


        2.传递对象参数。也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。如果传递的是对象,那么该方法获得的只是一个对象地址的引用,通过这个引用可以访问和操作对象属性和行为,但是对象的实体并没有传递给该方法,它还在内存中的某个区域,这种情况下,当方法改变对象的属性,会直接改变对象实体的数据
。               (注:集合类和数组在传递的时候都是作为对象来进行地址引用传递)

            
编码实例:
     public classObjectArg
         {
public String name=""; // 姓名
public int age=0;      // 年龄
public String sex="";  // 性别
         }
        public class ArgDemo {
static int intArg = 10;// int基础类型的测试变量
static ObjectArg objectArg = new ObjectArg();// 对象类型的测试变量
public static void main(String[] args) {
changeIntArg(intArg);// 测试int基本类型传参
System.out.println("传递给方法的int类型参数:"+intArg);
System.out.println("intArg=" + intArg);// 输出传递给方法的变量值
objectArg.age = 29;// 初始化对象数据
objectArg.name = "李经理";
objectArg.sex = "男";
changeOjbectArg(objectArg);// 测试对象传参
System.out.println("传递给方法的对象:");
printObjInfo(objectArg);// 输出传递给方法的对象信息
}

/**
* 测试基本数据类型传参的方法
* @param arg int类型参数
*/
public static void changeIntArg(int arg) {
System.out.println("=========实参未改变=============");
System.out.println("changeIntArg()方法开始执行");
System.out.println("int类型参数arg=" + arg);
System.out.println("将参数值除以2");
arg = arg / 2;// 改变参数值
System.out.println("arg=" + arg);
}
/**
* 测试对象类型传参的方法
* @param arg 对象参数
*/
public static void changeOjbectArg(ObjectArg arg){
System.out.println("========实参被改变==============");
System.out.println("changeOjbectArg()方法开始执行");
System.out.println("输出对象参数:");
printObjInfo(arg);// 输出对象参数信息
arg.name="王经理";// 修改对象参数信息
arg.sex="女";
arg.age=20;
System.out.println("修改后的对象参数:");
printObjInfo(arg);// 输出修改后的对象参数信息
}
/**
* 输出对象信息的方法
* @param arg 对象参数
*/
private static void printObjInfo(ObjectArg arg) {
System.out.println("\t名字:"+arg.name);
System.out.println("\t性别:"+arg.sex);
System.out.println("\t年龄:"+arg.age);
}
}

运行结果:
=========实参未改变=============
changeIntArg()方法开始执行
int类型参数arg=10
将参数值除以2
arg=5
传递给方法的int类型参数:10
intArg=10
========实参被改变==============
changeOjbectArg()方法开始执行
输出对象参数:
名字:李经理
性别:男
年龄:29
修改后的对象参数:
名字:王经理
性别:女
年龄:20
传递给方法的对象:
名字:王经理
性别:女
年龄:20

传值方式,传递的是值的副本。方法中对副本的修改,不会影响到调用方。

传引用方式,传递的是引用的副本。此时,形参和实参指向同一个内存地址。对引用副本所指向的对象的修改,如修改对象属性、容器内容等,会影响到调用方。对引用副本本身(对象地址)的修改,如设置为null,重新指向其他对象,不会影响到调用方。


原创粉丝点击