Eclipse插件PMD建议我使用
str.charAt(0) == 'a'
而不是
str.startWith("a")
但是我不想让代码更复杂,我相信java编译器非常聪明,它们通过将str.start转换为str.charAt(0)=='a来提高str.startWith(“a”)的性能'(或类似的东西)。
我是对的吗?
答案 0 :(得分:3)
快速微观基准测试表明,这两种方法的表现非常相似(每个方法在我的标准台式机上使用热点7的时间不到5纳秒)。
所以我会忽略该建议并使用对您来说更具可读性的任何版本的代码。
答案 1 :(得分: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");