我认为我将对这个问题采用经验方法,而不是猜测附加方法调用的开销将如何影响结果。 我从此答案中获取了indexOf基准,并为contains()添加了两种基准方法(一种采用字符串常量,另一种采用变量)。 我正在使用Windows x64上刚发布的1.8.0_71。
# JMH 1.11.3 (released 8 days ago)
# VM version: JDK 1.8.0_71, VM 25.71-b15
Benchmark Mode Cnt Score Error Units
IndexOfTest.containsString avgt 30 26.596 ± 0.099 ns/op
IndexOfTest.containsStringIndirect avgt 30 28.683 ± 0.088 ns/op
IndexOfTest.indexOfChar avgt 30 26.855 ± 0.171 ns/op
IndexOfTest.indexOfCharIndirect avgt 30 25.833 ± 0.116 ns/op
IndexOfTest.indexOfString avgt 30 26.192 ± 0.107 ns/op
IndexOfTest.indexOfStringIndirect avgt 30 27.547 ± 0.152 ns/op
请注意,基准测量值是每次操作纳秒。 因此,将contains(“ z”)与indexOf(“ z”)进行比较,indexOf()的速度要稍快一些,但不到0.6ns。 有趣的是,间接变量(使用变量)的差异较大,超过1ns。
我已将此基准的代码放置在GitHub上:[https://github.com/tedyoung/indexof-contains-benchmark]