坚持英文原版阅读.
避免创建不必要的对象!
一.字符串
String s = new String("AA");//unnecessary
String s = "AA";//instead
第一行会在堆中分配内存空间
第二行会放在字符串常量池中
二.
对比以下代码:
static boolean isRomanNumeral(String s){
return s.matches("^(?=.)");
}
private static final Pattern ROMAN = Pattern.compile("^(?=.)");
static boolean isRomanNumeral(String s){
return ROMAN.matcher(s).matches();
}
1.第一部分代码,在每次调用isRomanNumeral方法时都会生成一个"^(?=.)",调用完毕后被GC。查看s.matches("")方法源码:
package java.util.regex.Pattern.java
public static boolean matches(String regex, CharSequence input) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
}