比较PMD和CheckStyle时出现问题。然而,我找不到PMD和FindBugs之间的差异/相似之处的详细分类。我相信一个关键的区别是PMD在源代码上工作,而FindBugs在编译的字节码文件上工作。但就能力而言,这是一种非此即彼的选择,还是二者相辅相成
我两者都用。我认为它们是相辅相成的
正如您所说,PMD处理源代码,因此会发现一些问题,如:违反命名约定、缺少大括号、错误放置的空检查、长参数列表、不必要的构造函数、缺少中断开关等。PMD还告诉您代码的圈复杂度,我认为这非常有帮助(FindBugs没有告诉您圈复杂度)
FindBugs在字节码上工作。以下是FindBugs发现PMD没有发现的一些问题:equals()方法在子类型上失败,克隆方法可能返回null、布尔值的引用比较、不可能强制转换、32位int移位量不在0-31范围内、包含自身的集合、equals方法始终返回true、无限循环等
通常,它们中的每一个都会发现一组不同的问题。使用这两种工具。这些工具教会了我如何编写好的Java代码