使用静态工厂方法返回可重用对象
一般来说,最好能重用单个对象,而不是在每次需要的时候就创建一个相同功能的新对象。重用方式既快速又流行。
每次都会创建对象的例子:
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();
}