0

Eclipse 插件 PMD 建议我使用

str.charAt(0) == 'a'

代替

str.startWith("a")

但我不想让代码更复杂,我相信 java 编译器非常聪明,它们通过将 str.startWith("a") 转换为 str.charAt(0) == 'a' (或相似的东西)。

我对吗?

4

2 回答 2

3

一个快速的微型基准测试表明,这两种方法的性能非常相似(在我的带有热点 7 的标准台式机上,每种方法都花费不到 5 纳秒)。

因此,我将忽略该建议并使用对您而言更具可读性的代码版本。

于 2013-05-17T16:37:05.443 回答
3

这是来自 Java 7 编译类的两种方法的反编译代码。这两种方法都没有进行任何优化,应该可以安全地假设 Java 6 编译器会执行任何此类优化:

前:

String str = "abc";
if (str.charAt(0) == 'a') {
   System.out.println("Using CharAt");
}
if (str.startsWith("a")) {
   System.out.println("Using startsWith");
}

后:

String str = "abc";
if(str.charAt(0) == 'a')
    System.out.println("Using CharAt");
if(str.startsWith("a"))
    System.out.println("Using startsWith");
于 2013-05-17T16:38:10.083 回答