在java中我们经常会传递一些值当作参数到方法中,因此我们了解java中方法的参数传递机制是很有必要的,以免发生意想不到的错误。
在java中传递的都是的值的副本,而参数值又分为两种:
(1)基本数据类型
如果方法中的参数是基本数据类型,当在方法内更改该参数的值,并不会影响原始的参数值。
(2)引用类型
如果方法中的参数是引用类型,当在方法内更改该引用类型里面的属性值,会影响原始引用类型参数的属性值;这是因为参数传递的是该引用类型的地址的副本,他们都是指向同一块内存地址,因此对同一块内存地址进行修改,肯定会变动。
总的来说,当传入的参数是一个基本数据类型,是不会影响原始的参数值;当传入的参数是一个引用类型(传递该引用的地址副本,相当于浅拷贝),改变该引用类型的属性值(即修改该地址的内容),会对该引用类型的内容有影响,除非在方法内重新new一个新的对象(),再修改该地址的内容,则不会影响原始引用类型的内容(相当于深拷贝)
下面我们通过一个简单的例子来说明
/**
* @author
* @PackageName:PACKAGE_NAME
* @ClassName:Param
* @Description:
* @date 2021-8-10 19:02
*/
public class Param {
private Integer num;
public void changParam(int num,Param param){
num++;
param.setNum(param.getNum()+1);
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public static void main(String[] args) {
Param param = new Param();
param.setNum(3);
int num = 10;
System.out.println("============修改前的值============");
System.out.println(String.format("num: %d , param.num: %d",num,param.getNum()));
//修改值
param.changParam(num,param);
System.out.println("============修改后的值============");
System.out.println(String.format("num: %d , param.num: %d",num,param.getNum()));
}
}