程序设计语言(c++,Pascal)一般提供两种
参数传递方式.
分别是: 值调用
和 引用调用
在java中有些人可能会认为对象采用的是引用调用.
但实际上java的对象引用
是按值传递
的
例子:
public class ParamTest {
public static void main(String[] args){
System.out.println("Testing tripleValue");
//测试变量
double percent = 10;
System.out.println("原本的值为 percent = "+percent);
tripleValue(percent);
System.out.println("调用函数之后的值为 percent = "+percent);
System.out.println("\nTesting tripleSalary: ");
//对象测试
EmployeeThree harry = new EmployeeThree("Harry", 50000);
System.out.println("原本对象的值为 percent = "+harry.getSalary());
tripleValue(harry);
System.out.println("调用函数之后的对象的值为 percent = "+harry.getSalary());
System.out.println("\nTesting swap:");
//两个对象进行互换
EmployeeThree a = new EmployeeThree("Alice", 70000);
EmployeeThree b = new EmployeeThree("Bob", 60000);
System.out.println("原本对象a的名字 a = "+a.getName());
System.out.println("原本对象b的名字 b = "+b.getName());
swap(a,b);
System.out.println("调用函数之后的对象a的名字 a = "+a.getName());
System.out.println("调用函数之后的对象b的名字 a = "+b.getName());
}
public static void tripleValue(double x){
x = 3*x;
System.out.println("方法里面的输出 Salary : "+x);
}
public static void tripleValue(EmployeeThree x){
x.raiseSalary(200);
System.out.println("方法里面的输出 Salary : "+x.getSalary());
}
public static void swap(EmployeeThree x, EmployeeThree y){
EmployeeThree temp = x;
x = y;
y = temp;
System.out.println("方法里面的输出 x = "+x.getName());
System.out.println("方法里面的输出 y = "+y.getName());
}
}
class EmployeeThree { //员工类第三
private String name;
private double salary;
public EmployeeThree(String n, double s) {
name = n;
salary = s;
}
public String getName() { //获取名字
return name;
}
public double getSalary() { //获取薪水
return salary;
}
public void raiseSalary(double byPercent){
double raise = salary * byPercent/100;
salary += raise;
}
}
运行结果:
测试变量时:
变量原本是10
, 函数内部 乘3 之后在内部输出30,
在函数调用之后,重新输出还是为10
.
.
.
测试对象时:
通过给对象的成员属性赋值
,然后调用方法乘2%
原本50000
,函数的内部变成150000
,在函数调用之后,输出的是150000
.
.
.
测试两个对象的成员属性互换时:
原本a = Alice
, b = Bob
,通过调用函数的静态swap()方法
,变成了a = Bob
, b =Alice
但是在调用之后,重新输出时还是a = Alice
, b = Bob
.
所有我们能得出结论:java对象采用的不是引用调用,
实际上,对象引用是按值传递
的.