避免创建重复的对象

重复使用同一个对象,而不是每次去创建同一个功能相同的对象。比如前后需要的字符串的字面量相同

String s = new String("silly"); 

如果每次都这样去创建字符串,那么是非常糟糕的,虽然每次都是“silly”,都每次都是新的字符串

应该这样做

String  s = "No longer silly";

  对于提供了静态工厂方法的类,也可以使用静态工厂方法提供同一个类 

 下面是多次创建重复对象的另一个例子

class Person{
    private final Date birthDate;
    
    public Person(Date birthDate){
        this.birthDate = birthDate;
    }
    
    public boolean isBabyBoomer(){
        Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        gmtCal.set(1946, Calendar.JANUARY, 1, 0,0,0);
        Date boomStart = gmtCal.getTime();
        gmtCal.set(1965, Calendar.JANUARY, 1, 0,0,0);
        Date boomEnd = gmtCal.getTime();
        return birthDate.compareTo(boomStart) >= 0 &&
                birthDate.compareTo(boomEnd) < 0 ;
    }
}

 isBabyBoomer每次被调用的时候,都会创建新的新的gmtCal 、boomStart、 boomEnd ,这是没有必要的

一种正确做法

class Person{
    private final Date birthDate;

    public Person(Date birthDate){
        this.birthDate = birthDate;
    }
    
    private static final Date BOOM_START;
    private static final Date BOOM_END;
    
    static {
        Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        gmtCal.set(1946, Calendar.JANUARY, 1, 0,0,0);
        BOOM_START = gmtCal.getTime();
        gmtCal.set(1965, Calendar.JANUARY, 1, 0,0,0);
        BOOM_END = gmtCal.getTime();
    }
    
    
    public boolean isBabyBoomer(){

        return birthDate.compareTo(BOOM_START) >= 0 &&
                birthDate.compareTo(BOOM_END) < 0 ;
    }
}

   并不是主张仍何时候避免创建对象,而是在必要的时候避免,如字面量相同的String。在现代的JVM中,对于小对象的创建和回收是非常廉价的,所以正确创建对象可以使代码更加的清晰、简洁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值