新手的一点问题

cx1014 2010-04-17 05:53:23
在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;
}
...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfq642773391 2010-04-17
  • 打赏
  • 举报
回复
首先,虽然你的变量时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());
}
cx1014 2010-04-17
  • 打赏
  • 举报
回复
怎么没人回答说

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧