在Java中一个方法的参数是对象时,会使用这个对象的复制品传入函数中但为什么函数可以实现对这个对象中数据的修改??是如何实现的??请高手解释下觉得我问得不清楚的可以看下面这个简单程序,其中tripleSalary(Employee x)实现了对一个Employee对象中salary值的修改,在Java中方法既然不能实现让对象参数引用一个新对象而我的数据又是private类型的,那这个修改是如何做到的??public class ParamTest
{
   public static void main(String[] args)
   {
      System.out.println("\nTesting tripleSalary:");
      final Employee harry = new Employee("Harry", 50000);
      System.out.println("Before: salary=" + harry.getSalary());
      tripleSalary(harry);
      System.out.println("After: salary=" + harry.getSalary());
   }   public static void tripleSalary(Employee x) // works
   {
      x.raiseSalary(200);
      System.out.println("End of method: salary=" + x.getSalary());
   }}class Employee // simplified Employee class
{
   public Employee(String n, double s)
   {
      name = n;
      salary = s;
   }   public double getSalary()
   {
      return salary;
   }   public void raiseSalary(double byPercent)
   {
      double raise = salary * byPercent / 100;
      salary += raise;
   }   private String name;
   private double salary;
}

解决方案 »

  1.   

    首先,虽然你的变量时private的,但你提供了public的方法raiseSalary可以改变这个私有的变量
    其次    public static void main(String[] args)
      {
      System.out.println("\nTesting tripleSalary:");
      final Employee harry = new Employee("Harry", 50000);//harry只是个引用,他记录了一个地址,这个地址指向new Employee("Harry", 50000)
      System.out.println("Before: salary=" + harry.getSalary());
      tripleSalary(harry);//传的是harry,也就是new Employee("Harry", 50000)的地址
      System.out.println("After: salary=" + harry.getSalary());
      }  public static void tripleSalary(Employee x) // works
      {
      x.raiseSalary(200);//这里,x也是个引用,他的值就是传进来的harry的值,也是指向new Employee("Harry", 50000)的,x.raiseSalary(200);就执行了new Employee("Harry", 50000)的public方法raiseSalary(200);然后salary的值就改变了
      System.out.println("End of method: salary=" + x.getSalary());
      }