Effective Java---------避免创建不必要的对象

使用静态工厂方法返回可重用对象

一般来说,最好能重用单个对象,而不是在每次需要的时候就创建一个相同功能的新对象。重用方式既快速又流行。

每次都会创建对象的例子:

String s = new String("s");

每次执行这个语句都会创建一个新的实例,可以做如下改进:

String s = "s";

这个版本只用了一个实例,而不是每次执行都创建一个新的实例。

在创建可重用对象时,最好使用静态工厂方法:例如,

Boolean.valueOf("true");


public static Boolean valueOf(String s) {
    return parseBoolean(s) ? TRUE : FALSE;
}

这个方法每次返回的都是同一个对象,即静态变量Boolean.TRUE或Boolean.FALSE。

高效的进行正则表达式验证

通常验证正则表达式,使用的方法是String.matches方法,

String v = "V";
v.matches("^(?=.)M*(C[MD]|D?C{0,3})"+"(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");

虽然String.matches方法最易于查看一个字符串是否与正则表达式相匹配,但并不适合在注重性能的情形中使用。因为它的内部为正则表达式创建了一个Pattern实例,却只用了一次,之后就进行垃圾回收了,而创建Pattern实例的成本很高。

为了提升性能能,应该显示地将正则表达式编译成一个Pattern实例(不可变),让它成为初始化的一部分,并将它缓存起来,每当调用方法时就重用一个实例。

private static final Pattern ROMAN = Pattern.compile("^(?=.)M*(C[MD]|D?C{0,3})"+"(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
public static boolean isRomanNumber(String s){
   return ROMAN.matcher(s).matches();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值