Java基础-参数传递

程序设计语言中有关将参数传递给方法(或函数)的方式有两种。按值传递(call by value)表示方法接收的是调用者提供的值。而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址 。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。

java程序设计语言总是采用*按值调用*,也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。

代码示例:

package JavaBase.ParameterTransfer;

/**
 * java基础,基本类型参数传递测试类
 * 
 * @author zhouTing
 *
 */
public class ChangeValueTest {

    public static void main(String[] args) {
        int num = 3;
        toChangeValue(num);
        System.out.println("num = " + num);
    }

    public static void toChangeValue(int x){
        x = x*3;
    }
}

输出结果:

num = 3

可以看到,无论怎样,调用这个方法之后,num的值还是3。下面看一下具体的执行过程:

  1. x被初始化为num值得一个拷贝,也就是3.
  2. x被乘以3后等于9。但是num仍然是3.
  3. 这个方法结束之后,参数变量x不再使用。

这里写图片描述

然而,方法的参数共有两种类型:

  • 基本数据类型
  • 对象引用

一个方法不可能修改一个基本数据类型的参数,而对象引用作为参数就不同了。

package JavaBase.ParameterTransfer;

/**
 * Java基础,对象类型参数传递,测试类
 * 
 * @author zhouTing
 *
 */
public class ObjectValueTest {

    public static void main(String[] args) {
        Employee employee = new Employee("Max", 65);
        toChangeValue(employee);
        System.out.println("name : " + employee.getName() + " | age : " + employee.getAge());
    }

    public static void toChangeValue(Employee emp) {
        emp.setName("Tom");
        emp.setAge(20);
    }
}

输出结果:

name : Tom | age : 20

当调用 toChangeValue(employee)时,具体的执行过程为:

  • emp被初始化为employee值得拷贝,这里是一个对象的引用。
  • toChangeValue方法应用于这个对象的引用,emp和employee同时引用的那个Employee对象的属性值改变。
  • 方法结束收,参数emp不再使用,对象employee继续引用属性值改变后的对象。(如下图所示)

    这里写图片描述

    由此可见实现一个改变对象参数状态的方法并不是一件难事,理由很简单,方法得到的是对象引用的拷贝,对象引用及其拷贝同时引用同一个对象。

    下面总结一下Java中方法参数的使用情况:

    • 一个方法不能修改一个基本数据类型的参数。
    • 一个方法可以改变一个对象参数的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值