java参数传递 -- 按值调用

一些术语的解释

  1. 按值调用:表示方法接收的是调用者提供的值。即方法的得到的是变量的一份拷贝,而非原本的变量。
  2. 按引用调用:表示方法接收的是调用者提供的变量地址。方法的得到的是原本的变量的引用。

一个方法可以修改 按引用调用 传入的变量值,而不可以修改 按值调用 传入的变量值。

在java中,总是 按值调用,即方法得到的总是所有参数值的一个拷贝,无法修改原本变量的内容。

所以,在java中,一个方法不可能修改一个基本数据类型的参数。但是将对象作为参数就可以实现这一操作。

例如:

对一个基本数据类型的变量进行操作:

public static void tripleValue(int a){
    a = a * 3;
}
int a = 10;
tripleValue(a);

并不会改变a的值。内存示意图如下:
image

变量被进行了复制操作。

而对对象进行操作就不同了:

public static void tripleValue(NumContent a){
    a.tripleIt();
}
a = new NumContent();
tripleValue(a);

内存模型如下:
image

可以看到,这里被复制的是对象的引用,但是仍旧指向原本的内存地址。

然而,这并不意味着java对于对象采用的是 按引用调用。下面是一个反例:

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

Employee a = new Employee("Alice");
Employee b = new Employee("Bob");
swap(a,b);
//执行完成后,a仍旧为Alice,b为Bob

方法并没有改变存储在变量a和b中的对象引用。swap交换的是两个对象的引用的拷贝。而执行完毕后两个拷贝x和y被直接丢弃,a和b仍旧指向原本的内存空间。

内存模型如下:
image

这说明,对象引用是 按值传递 的。

java中方法参数使用情况总结

  1. 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
  2. 一个方法可以改变一个对象参数的状态。
  3. 一个方法不能让对象参数引用一个新的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值