不要编写返回引用可变对象的访问器方法

最近看java核心技术里面提到的。
首先看一段代码

package structor;

import java.util.Date;
import java.util.GregorianCalendar;

public class Test0817 {


        public static void main(String[] args){  
            Employee emp=new Employee();  
            System.out.println(emp.getHireDay());  
            Date d=emp.getHireDay();  
            d.setTime(d.getTime()+1000000000);  
            System.out.println(emp.getHireDay());  
        }  

    }  
    class Employee{  

        public Employee(){  
            GregorianCalendar gc=new GregorianCalendar();  
            hireDay=gc.getTime();  
        }  

        public Date getHireDay() {  
            return hireDay;  
        }  

        public void setHireDay(Date hireDay) {  
            this.hireDay = hireDay;  
        }  

        private Date hireDay;  
}

运行结果是一样吗?

Wed Aug 17 22:11:46 CST 2016
Mon Aug 29 11:58:26 CST 2016

很明显不一样哦。

因为两者是改变的同一个对象,所以下面的改变了,上面的也改变了。

public Date getHireDay() {  
            return (Date)hireDay.clone();  
        } 

这样的话,每次获取的都是克隆的值,所以不会影响原来的要获取的值。

Wed Aug 17 22:22:05 CST 2016
Wed Aug 17 22:22:05 CST 2016

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值