1 class Employee{2 private Date hireDay;3 //其他4 public Date getHireDay() {5 return hireDay;//不好的写法6 }7 }
执行如下代码:
Employee harry = new Employee(); harry.setHireDay("2010-10"); Date date = harry.getHireDay();//返回雇佣日期,类型为Date. System.out.println(date.getTime()); double ten = 10*365.25*24*60*60*1000; date.setTime(date.getTime() - (long)ten); System.out.println(harry.getHireDay().getTime());//此时我们会发现harry的hireDay被改变了
也许大部分初学者都会这样写,我也一样,认为没有毛病,但是,结果不尽人意!画图可知why。
示意图如下
所以我们不要编写返回引用可变对象的访问器方法。解决方法:clone();
public Date getHireDay() { return (Date)hireDay.clone();//使用clone,返回一个副本 }
这样无论如何改变date也不会影响harry中的hireDay了。