JAVA基础--方法传参

JAVA基础--方法传参

为啥拿这个当话题?

在初学者阶段,许多童鞋都对方法传参比较迷茫,知其然不知其所以然。

一.先说说参数传递的几个术语:

值调用(call by vale):表示方法接收的是调用者传递的值。

引用调用(call by reference):表示方法接收的是调用者传递的变量地址。

一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值;

**JAVA语言总是采用值调用。
也就是说,JAVA方法得到的是所有参数值的一个拷贝,方法不能修改传递给他的任何参数变量的内容

例如:

int age=100;

person.setAge(age);

在以上方法调用后,age 的值还是100;

下面再看一例子,假如某方法将一个变更值修改为原来的值的3倍:

public void addValue(int x){

x = 3 * x;

}

然后调用这个方法:

int percent = 10;

addValue(percnet);

无论如何调用,percent的值还是10,下面是执行过程:

1.x被初始化为percent值的一个拷贝(也就是10);

2.x被乘以3后,值变为30。但是percent仍然是10;

3.该方法结束后,参数变量x不再使用。

如图一:

二.java方法传参类型:

基本数据类型:(数字,布尔型)

对象引用类型:

基本数据类型传参在上例中已经说过了,是不能修改基本数据类型参数的值的.

那么对于对象引用类型的传参,能否修改呢?

先来看例子:

有如下方法:

public static void tripleSalary(Employee x)
{
   x.raiseSalary(200);

}

当调用如下代码

harry = new Employee();
tripleSalary(harry);

时,具体的执行过程如下:

1).x被初始化为harry对象的拷贝,这里是一个对象的引用;

2).raiseSalary方法应用于这个对象引用.即x和harry同时引用的Employee对象薪金提高了200%.

3).方法调用结束后,参数变量x不再使用.但对象变量harry继续引用那个薪金增至3倍Employee对象.

其过程如下图:

通过以上实例,可以看出对象参数传递的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象.

很多程序语言提供两种传递方式:值传递和引用传递(C++和Pascal).

有些程序员认为java语言对对象参数传递也是用的引用调用.实际上是理解错误.这种错误具有一定的普遍性.下面通过一反例来说明该问题:

首先,编写一个交换两个Employee对象的方法:

public staitc void swap(Employee x,Emplyee y)
{
    Employee temp = x;
    x = y;
    y = temp;
}

如果JAVA程序语言是对对象采用引用调用,那么这个方法就应该能够实现交换数据的效果:
    Employee a = new Employee("Alice",...);
    Employee b = new Employee("Bob",...);
    swap(a,b);
但是,方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。
在方法结束时,参数变量x和y被丢弃了。原来的变量a和b仍然引用这个方法调用之前所引用的对象如下图:

这个过程说明:java语言对对象采用的不是引用调用,实际上对象引用进行的是值传递。

最后总结一下在JAVA中,方法参数的使用情况:
*一个方法不能修改一个基本数据类型的参数;
*一个方法可以改变一个对象参数的状态(属性);
*一个方法不能实现让对象参数引用一个新对象;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值