避免创建不必要的对象
一.字符串常量
String s = new String("你好");// 创建了一个新的实列,如果在for循环中就会产生很多实列
String sOne = "你好";// 始终只有一个实列
二.包装类型小心使用
private static Integer sum() {
Integer sum = 0;// 这里应该使用int声明,否则每次sum += 1都会创建一个Integer实列
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
return sum;
}
三.避免每次都创建一个内容一样的实列
//每一次调用都会创建一个Pattern实例,却只用了一次就回收了。
static boolean isRomanNumeral(String s) {
return s.matches("^(?=.)M*(C[MD]|D?C{0,3})(x[cl]L?X{0,3}) (I[XV]IV?I{0,3})$");
}
优化如下
private static final Pattern ROMAN = Pattern.compile("^(?=.)M*(C[MD]|D?C{0,3})(x[cl]L?X{0,3})(I[XV]IV?I{0,3})$");
//ROMAN 成为了类初始化的一部分,这样每次调用都有一个Pattern实列了
static boolean isRomanNumeralOptimize(String s){
return ROMAN.matcher(s).matches();
}
参考资料: Effective Java.