harry.GetHireDay(); 返回一个Date型的引用,然后把它赋给d.
他们之间有一个改变了其中的内容,那么另一个吊用时他的内容就是已改变过的.

解决方案 »

  1.   

    vgvg说得对,d是对类实例harry中的属性hireDay的引用,当用户对d进行写操作时,就会改变hireDay的值,这种改变不是通过类提供的接口方法实现的,所以说它破坏了封装。我在实际使用中一般使用对象克隆来防止出现这种现象,不知vgvg有什么更好方法?
    import java.util.Date;public class Employee 
    {
    public Object getHireDay()
    {
    return hireDay.clone();
    }
    private String name;
    private double salary;
    private Date hireDay = new Date();public static void main(String [] args){
    Employee harry = new Employee(); 
    Date d = (Date)harry.getHireDay();
    System.out.println("操作前hireDay的值:" + d);
    System.out.println("操作前d的值:" + d);
    double TenYears = 10*365.25*24*60*60*1000; 
    d.setTime(d.getTime() - (long)TenYears);
    System.out.println("操作后hireDay的值:" + (Date)harry.getHireDay());
    System.out.println("操作后d的值:" + d);
    }
    }