前言
首先,我们要认识到一点Java中方法参数的传递都是按值调用的,方法得到的是所有参数值的一个拷贝,它并不能修改传递给它的参数变量的值。下面我们就来详细了解一下,为什么会这么说?
方法参数有两种类型:
- 基础数据类型(数字,布尔值)
- 对象
下面我们分别来分析这两种情况。
基础数据类型
/**
* 方法参数为基础数据类型
*/
public class ParamTest1 {
public static void main(String[] args) {
int number = 10;
changeValue(number);
System.out.println(number);
}
public static void changeValue(int x) {
x = x + 3;
}
}
打印结果为10,并没有发生任何的改变,这是为什么呢?我们来看一下具体的执行流程:
- x被初始化为percent值的一个拷贝
- x + 3 后等于13,但是我们要注意,这里是x等于13,但是percent仍然等于10
- 方法结束之后,x不再使用,而percent的值并没有发生任何改变。
也就是说,一个方法不可能修改一个基本数据类型的参数。
对象
对象引用作为参数的话,是可以修改参数的状态的,但是修改的是这个对象引用的地址值所对应的对象的状态,而不是修改了对象的地址值,也就是说实际上方法参数是对象的话,虽然可以修改参数的状态,但是并没有修改参数的值。
当然,对象引用中又分为两种情况:
修改对象状态
/**
* 方法参数为对象时,修改该对象的状态
*/
public