Eclipse 插件 PMD 建议我使用
str.charAt(0) == 'a'
代替
str.startWith("a")
但我不想让代码更复杂,我相信 java 编译器非常聪明,它们通过将 str.startWith("a") 转换为 str.charAt(0) == 'a' (或相似的东西)。
我对吗?
Eclipse 插件 PMD 建议我使用
str.charAt(0) == 'a'
代替
str.startWith("a")
但我不想让代码更复杂,我相信 java 编译器非常聪明,它们通过将 str.startWith("a") 转换为 str.charAt(0) == 'a' (或相似的东西)。
我对吗?
一个快速的微型基准测试表明,这两种方法的性能非常相似(在我的带有热点 7 的标准台式机上,每种方法都花费不到 5 纳秒)。
因此,我将忽略该建议并使用对您而言更具可读性的代码版本。
这是来自 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");