让我们看一下以下基本代码:
if (s != null && s.equals(“”)) {
}
|
或
乍一看,它看起来像是正确的代码。但是,如果我们考虑性能,那不是最佳选择。让我们稍微改变一下方法,改用String.isEmpty()方法:
if (s != null && s.isEmpty()) {
}
|
改用isEmpty以后的新代码速度提高了约20–40%!
性能测试代码:
@BenchmarkMode(Mode.AverageTime)
@Fork(1)
@State(Scope.Thread)
@Warmup(iterations = 5, time = 1)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Measurement(iterations = 10, time = 1)
public class EmptyStringEquals {
@Param({"", "nonEmptyString"})
private String strParams;
@Benchmark
public boolean nonNullAndIsEmpty() {
return strParams != null && strParams.isEmpty();
}
@Benchmark
public boolean equalsPost() {
return strParams != null && strParams.equals("");
}
@Benchmark
public boolean preEquals() {
return "".equals(strParams);
}
}
测试结果:
EmptyStringEquals.equalsPost avgt 10 4.240 ± 0.058 ns/op
EmptyStringEquals.nonNullAndIsEmpty avgt 10 2.985 ± 0.048 ns/op
EmptyStringEquals.preEquals avgt 10 4.243 ± 0.062 ns/op
EmptyStringEquals.equalsPost nonEmptyString avgt 10 3.522 ± 0.034 ns/op
EmptyStringEquals.nonNullAndIsEmpty nonEmptyString avgt 10 2.894 ± 0.048 ns/op
EmptyStringEquals.preEquals nonEmptyString avgt 10 3.672 ± 0.016 ns/op
|
基准测试的源代码,因此您可以自己尝试。