ParamTest.java
public class ParamTest {
public static void tripleValue(double x) {
x = 3 * x;
System.out.println("方法结束: x=" + x);
}
public static void tripleSalary(Employee e) {
e.raiseSalary(200);
System.out.println("方法结束: salary=" + e.getSalary());
}
public static void swap(Employee x, Employee y) {
Employee temp = x;
x = y;
y = temp;
System.out.println("方法结束: x=" + x.getName());
System.out.println("方法结束: y=" + y.getName());
}
public static void main(String[] args) {
/*
测试1: 方法不能修改基本数据类型的参数(即数值型或布尔型)
*/
System.out.println("测试tripleValue:");
double percent = 10;
System.out.println("方法执行前: percent=" + percent);
ParamTest.tripleValue(percent);
System.out.println("方法执行后: percent=" + percent);
/*
测试2: 方法可以改变对象参数的状态
*/
System.out.println("\n测试tripleSalary:");
Employee e = new Employee("张三", 1000);
System.out.println("方法执行前: salary=" + e.getSalary());
tripleSalary(e); // 同一个类内部,静态方法可以直接被引用,无需显式地指定类名
System.out.println("方法执行后: salary=" + e.getSalary());
/*
测试3: 方法不能让一个对象参数引用一个新对象
*/
System.out.println("\n测试swap:");
Employee a = new Employee("李四", 3000);
Employee b = new Employee("王五", 2000);
System.out.println("方法执行前: salary=" + a.getSalary());
System.out.println("方法执行前: salary=" + b.getSalary());
swap(a, b);
System.out.println("方法执行后: salary=" + a.getSalary());
System.out.println("方法执行后: salary=" + b.getSalary());
}
}
参考输出
测试tripleValue:
方法执行前: percent=10.0
方法结束: x=30.0
方法执行后: percent=10.0
测试tripleSalary:
方法执行前: salary=1000.0
方法结束: salary=3000.0
方法执行后: salary=3000.0
测试swap:
方法执行前: salary=3000.0
方法执行前: salary=2000.0
方法结束: x=王五
方法结束: y=李四
方法执行后: salary=3000.0
方法执行后: salary=2000.0