环境:
MacBook Pro 15
jdk8
IntelliJ IDEA
Spring版本:5.0.7.RELEASE
引子:
看Spring AOP源码,看到5.0.7版本把DefaultAopProxyFactory.class,中的createAopProxy()的判断逻辑,是通过!进行判断,考虑和“==”判断有没有区别?。
问题:
- Java里Boolean类型的判断,是否有效率问题?
- 字符串判空,如何写效果更好?
解决:
- 最优解:使用!。
- 最优解:使用(str==null || str.length() == 0)。
TIPS:
1.看下Spring5.0.7版本中DefaultAopProxyFactory类中的createAopProxy()判断逻辑:
public AopProxy createAopProxy(AdvisedSupport advisedSupport) throws AopConfigException {
if (!advisedSupport.isOptimize() && !advisedSupport.isProxyTargetClass() && advisedSupport.getProxiedInterfaces().length != 0) {
return new JdkDynamicAopProxy(advisedSupport);
} else if (!cglibAvailable) {
throw new AopConfigException("Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.");
} else {
return DefaultAopProxyFactory.CglibProxyFactory.createCglibProxy(advisedSupport);
}
}
2.看下java.lang.String.java中的isEmpty()方法:
public boolean isEmpty() {
return value.length == 0;
}
public int length() {
return value.length;
}
给大家个简单原则:源码咋用就咋用 maff!!!
参考有热心网友测试对比,基本结论和给大家的原则一致。
参考: