1、按值调用和按引用调用
- 按值调用:方法接收的是调用者提供的值
- 按引用调用:方法接收调用者提供的变量地址
- 方法可以修改按引用传递的变量的值,不能修改按值传递的变量的值
2、Java值传递
- Java采用值传递,也就是方法得到的是所有参数值的一个副本。方法不能修改传递给它的任何参数变量内容。
public static void triple(double x){
x = 3 * x;
}
double percent = 10;
triple(percent);
修改数值参数
- 对象作为引用参数可能被修改
public static void triple(Employee x){
x.raiseSalary(200); // 拷贝了一个,但是引用的对象还是一样的
}
harry = new Employee();
triple(harry);
修改对象参数
一个Java swap的例子,证明其值传递的特点
public static void swap(Employee x, Employee y)
{
Employee temp = x;
x = y;
y = temp;
System.out.println("End of method: x=" + x.getName());
System.out.println("End of method: y=" + y.getName());
}
-
最终副本交换了引用的对象,但原始传递的参数没有变化
Java swap对象时的引用情况
Java值传递的能与不能
- 方法不能修改基本数据类型的参数
- 方法可以改变对象参数的状态 (状态:https://www.jianshu.com/p/36ba065d1624)
- 方法不能让一个对象参数引用一个新的对象
网友评论