java - java 6或7编译器是否改进了 str.startWith ("a") 并将其转换为 str.charAt(0) == 'a' 如果它包含一个字符的字符串?

标签 java compiler-optimization pmd

Eclipse 插件 PMD 建议我使用

str.charAt(0) == 'a'

而不是

str.startWith("a")

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

我说得对吗?

最佳答案

这里是来自 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");

关于java - java 6或7编译器是否改进了 str.startWith ("a") 并将其转换为 str.charAt(0) == 'a' 如果它包含一个字符的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613826/

相关文章:

java - 带有图像背景的 JPanel

java - Android TCP 连接到 C 服务器 : String transferred is noisy

java - 如何从代码中获取作为 java 对象的 PMD 结果报告?

java - 如何修复 PMD 警告 : UseCollectionIsEmpty?

java - 安装的java版本与eclipse中显示的版本不匹配

java - 在 Lucene 中索引数据数组的更好方法是什么?

c++ - 分支似然性提示是否通过函数调用进行?

c++ - 为什么使用默认构造函数 “{}”而不是 “= default”会有性能差异?

c - 由于缓冲区范围有限,使用 -Os 优化 memcpy 代码

java - 如何在pmd中创建java注释规则?