实现一个改变对象参数状态的方法并不是一件难事。理由很简单,方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。
很多程序语言提供了两种参数传递的方式:值调用和引用调用。有些程序员认为Java对对象采用的是引用调用,实际上,这种理解是不对的。
总结一下Java语言中,方法参数的使用情况:
1.一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)
2.一个方法可以改变一个对象参数的状态
3.一个方法不能实现让对象参数引用一个新的对象。
public class ParamTest{ /* *方法不能修改数值参数 */ public static void main(String[] args){ System.out.println("Testing tripleVale:"); double percent = 10; System.out.println("Before percent ="+percent ); tripleVale(percent); System.out.println("After percent =" + percent ); } /* *方法能改变参数状态 */ System.out.println(" Testing tripleSalayr:"); Employee harry = new Employee("Harry",5000); System.out.println("Before:salary=" + harry.getSalary); tripleSalary(harry); System.out.println("After:salary" + harry.getSalary); /* *方法不能attach新的对象至原对象参数 */ System.out.println(" Testing swap"); Employee a = new Employee("Alice",70000); Employee b = new Employee("Bob",60000); System.out.println("Before a=" +a.getName()); System.out.println("Before b=" +b.getName()) ; swap(a,b); System.out.println("After a=" + a.getName()); System.out.println("After b=" + b.getName()); } public static void tripleVale(double x){ x = 3*x; System.out.println("End of method: x=" + x); } public static void tripleSalary(Employee x){ x.raiseSalary(200); System.out.println("End of method: x=" + x.getSalary()); } 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()); } class Employee { public Employee(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; salary+=raise; } private String name; private double salary; }
个人感觉,是因为没有使用方法的返回值,因为没有方法的返回值,所以调用后值没有变化,只是状态发生了变化。