Java Getter方法返回类对象

来源:互联网 发布:mac虚拟机 360优化 编辑:程序博客网 时间:2024/06/08 08:07

首先创建一个类:

/** * 雇员类 * @author yifan * @version 1.0 2014-05-12 */class Employ {/** * 构建一个新的职员类 * @param name 职员姓名 * @param salary 工资 * @param hireDate 入职时间 */public Employ (String name, double salary, Date hireDate) {this.name = name;this.salary = salary;this.hireDate = hireDate;}/** * 获取姓名 * @return 姓名 */public String getName() {return this.name;}/** * 获取当前工资 * @return 当前工资 */public double getSalary() {return this.salary;}/** * 安全的获取入职时间 * @return 入职时间 */public Date getHireDate() {return (Date) this.hireDate.clone();}/** * 非安全的获取入职时间 * @return */public Date gethireDate() {return this.hireDate;}/** * 提高工资 * @param byPercent 提高的系数 */public void raiseSalary (double byPercent) {this.salary += this.salary*byPercent/100;}private String name;private double salary;private Date hireDate;}

在main方法中添加如下代码

// 下面试图修改员工的入职日期// 不安全的获取信息方法使用Date date= staff[0].gethireDate();String name =  staff[0].getName();name = name.substring(2);System.out.println(name);double ten = 10 * 365.25 * 24 * 60 * 60 * 1000;date.setTime(date.getTime() - (long)ten);System.out.println("不安全的信息访问:" + staff[0].getName() + staff[0].getHireDate().toString());// 安全的获取信息放法使用Date date1= staff[1].getHireDate();double ten1 = 10 * 365.25 * 24 * 60 * 60 * 1000;date.setTime(date1.getTime() - (long)ten1);System.out.println("安全的信息访问:" + staff[1].getName() + staff[1].getHireDate().toString());

上面的没有定义的对象自己去创建


运行程序后的结果是

张三123不安全的获取信息方法调用张三Mon Dec 12 12:00:00 CST 1977安全的获取信息方法调用李四Sat Jan 23 00:00:00 CST 1999


问题1: 上面更改date的值为什么能够修改职员对象的入职时间呢?

因为date是一个对象,Java中对于对象是引用传递, 所以实际上date就是指向员工入职时间的一个指针,所以对date对象进行了修改就相当与修改了员工的入职时间

那么问题2就来了

上面对name进行了修改位置为什么没有更改员工的姓名呢?

因为name对象的修改实际上就是将name指向了一个新的地方,而不是修改员工名字



说的不是很明白,希望大神无喷!!!

0 0
原创粉丝点击