有一次参加一个面试,一个面试官拿了一个面试题目,有一个判断 字符串 是否是数字的方法,问我有什么问题,应该如何优化。方法如下:
这是一个比较贴近实战的面试题,如果系统使用的频率不高,没有啥问题,但是遇到高并发,访问量很大的这个优化就很重要
正确的答案如下:
private static Pattern numericalPattern=Pattern.compile(“\d*”);
public static boolean isNumerical(String s) {
return numericalPattern.matcher(s).matches();
}
分析了一下String.matches的源码,调用了Pattern.matches
分析一下Pattern.matches源码,调用了Pattern.compile
分析一下Pattern.compile,发现每次调用都会new一个Pattern对象
如果频繁调用此方法,性能消耗会很高。修改为 static 只在启动的时候,创建一次。
实验了一下有6.5倍的性能提升。