当我将字符串与==而不是.equals()进行比较时,如何告诉Eclipse警告我

Mat*_*rog 40 java eclipse

我知道在比较Strings时,你应该使用.equals()not==,我理解这个的原因.但是我有时会忘记并==错误地比较字符串.如果Eclipse(比我聪明得多),我会通过执行以下一项或多项操作来警告我:

  • 用一条摇摆的红线强调我的错误并指出错误
  • 在我修复错误之前拒绝编译我的代码
  • 解决了我的错误
  • 用最近的Joshua Bloch书击败我,直到我道歉

在Eclipse 3.5中,您可以通过转到Window> Preferences> Compiler> Errors/Warnings让Eclipse警告您所有类型的事情,但遗憾的是"将字符串与==而不是.equals()进行比较"似乎不是一个他们 我只是错过了吗?有没有机会在将来的版本中添加它?

编辑:我宁愿使用Eclipse的内置功能,而不是必须下载插件.但是,我认为在你的答案中提到具有此功能的插件仍然是有用的.

小智 18

https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095

错误39095 - RFE:使用==比较非基元时的警告

如果编译器在使用==来比较非基本类型时允许警告,那么将字符串与==进行比较,而如果您实际使用并使用字符串池,则可以捕获有效方法,这将是很好的作为编译时警告,而不是运行时非明显的破坏..


fas*_*ava 16

Eclipse永远不会告诉你.FindbugsPMD可能可以.

编辑:我说

Eclipse永远不会告诉你.

因为代码没有a == b像java代码那样出错.如果您需要一些额外的帮助,这是其他插件可以提供帮助的地方.

编辑:根据Pascal Thivent的说法,Findbugs不能这样做,但它看起来像PMD可以.我将离开Findbugs的链接,因为它可能是遇到这个问题的人的有用链接.

  • PMD这样做:http://pmd.sourceforge.net/rules/index.html#String_and_StringBuffer_Rules(UseEqualsToCompareStrings规则) (4认同)
  • 说"Eclipse永远不会告诉你",这是毫无意义的.Eclipse和任何插件都不能保证**a == b`不正确.它是Eclipse编译器警告的内容与外部插件可以警告的内容之间的浮动边界. (3认同)
  • 我不确定Findbugs是否会说出这种错误,但它显示了很多相似的错误(我很少比较字符串,然后我可能记得使用.equals()或.contentEquals() (3认同)
  • 看起来这些都是Eclipse的插件,所以实际上Eclipse*可以*告诉我.我不想下载任何东西,但这是一个选项. (2认同)
  • "可能可以"并不是真正的答案(Findbugs没有发现这一点). (2认同)