总结Java中方法参数的使用情况
- 一个方法不能修改一个基本数据类的参数(即数值型和布尔型)
- 一个方法可以改变一个对象参数的状态
- 一个方法不能让对象参数引用一个新的对象
/**
* Java 采用的是值传递而不是引用传递
*/
public class TransVal {
public static void main(String[] args) {
/**
* 1.一个方法不能修改一个基本数据类型的参数
*/
System.out.println("Testing tripleValue");
double percent = 10;
System.out.println("Before: percent = " + percent);
tripleValue( percent);
System.out.println("After: percent = " + percent);
/**
* 2.一个方法可以改变一个对象的参数状态
*/
System.out.println("\nTesting raiseSalary");
Emp harry = new Emp("张杰",6000);
System.out.println("Before:salary = " + harry.getSalary());
tripleSalary(harry);
System.out.println("After:salary = " + harry.getSalary());
/**
* 一个方法不能让对象参数引用一个新的对象
*/
Emp a = new Emp("Alice",5000);
Emp b= new Emp("Jack", 9000);
System.out.println("Before: a.name = " + a.getName());
System.out.println("Before: b.name = " + b.getName());
swap(a,b);
System.out.println("After: a.name = " + a.getName());
System.out.println("After: b.name = " + b.getName());
}
public static void tripleValue(double x){
x = x * 3;
System.out.println("End of method:x = " + x);
}
public static void tripleSalary(Emp x){
x.raiseSalary(200);
System.out.println("End of method:salary = " + x.getSalary());
}
public static void swap(Emp x, Emp y){
Emp temp = x;
x = y;
y = temp;
System.out.println("End of method: x.name = " + x.getName());
System.out.println("End of method: y.name = " + y.getName());
}
}
class Emp{
private String name;
private double salary;
public Emp(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public void raiseSalary(int percent){
double raise = this.salary * percent /100;
this.salary = this.salary + raise;
}
}
总结:Java程序设计语言对对象采用的不是引用调用,实际上,对象引用是按值传递的