按值调用( call by value):表示方法接收的是调用者提供的值。
按引用调用( call by reference):表示方法接收的是调用者提供的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
方法参数共有两种类型:
- 基本数据类型(数字、布尔值)
- 对象引用
基本数据类型测试:
ackage com.kuang.test;
/**
* @Author Lbl
* @Date 2021/12/21 17:50
* @Description:方法参数
*/
public class MethodTest {
public static void add(int x){
x = x * 3;
}
public static void main(String[] args) {
int percent = 10;
add(percent);
// a仍然是10
System.out.println("此时percent的值:"+percent);
}
}
输出结果如下:
方法过程:
- x被初始化为percent值的一个拷贝(也就是10)。
- x被乘以3后等于30。但是percent仍然是10(如图4-6所示)。
- 这个方法结束之后,参数变量x不再使用。
对象引用
方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。
raiseSalarypackage com.kuang.test;
import lombok.Data;
/**
* @Author Lbl
* @Date 2021/12/21 17:54
* @Description:
*/
@Data
public class Employee {
private int salary;
public static void raiseSalary(Employee x){
x.salary = 3 * x.salary;
}
public static void main(String[] args) {
Employee employee = new Employee();
employee.setSalary(100);
raiseSalary(employee);
System.out.println(employee.getSalary());
}
}
输出结果如下:
方法过程:
- x被初始化为harry值的拷贝,这里是一个对象的引用。
- raiseSalary方法应用于这个对象引用。x和 harry同时引用的那个Employee对象的薪金提高了200%。
- 方法结束后,参数变量x不再使用。当然,对象变量harry继续引用那个薪金增至3倍的雇员对象(如图所示)。