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

时间:2010-02-06 06:38:19

标签: java eclipse

我知道when comparing Strings, you should use .equals() not ==,我理解这个的原因。但是我有时会忘记并错误地将字符串与==进行比较。我希望如果Eclipse(比我聪明得多),会通过执行以下一项或多项操作来警告我:

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

在Eclipse 3.5中,您可以通过转到Window>让Eclipse警告您所有类型的事情。偏好>编译器>错误/警告,但遗憾的是“将字符串与==而不是.equals()进行比较”似乎不是其中之一。我只是错过了吗?有没有机会在将来的版本中添加它?

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

4 个答案:

答案 0 :(得分:18)

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

  

错误39095 - RFE:使用==

比较非基元时发出警告      

如果编译器在使用==进行比较时可以允许警告,那就太好了   非原始类型,使String与==进行比较,同时采用有效的方法   如果你是实习并使用字符串池,可以作为编译时捕获   警告而不是运行时非明显的破损..

答案 1 :(得分:16)

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

编辑:我说

  

Eclipse永远不会告诉你。

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

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

答案 2 :(得分:0)

与之前的评论中所说的相反,FindBug(现在?)可以检测到这种比较错误。 就我而言,FindBug能够比PMD更好地报告错误。

有两种错误报告类别:

我想补充辩论“这个警告有用吗?”:

我已经从HTML5游戏中转换了大量JavaScript代码,将其转换为Android游戏。 在JavaScript中,字符串与“==”进行比较。 它们被转换为Java。 所以我需要一个工具来绝对确定我用“.equals(”。

替换所有

答案 3 :(得分:-1)

我认为你不能。

使用==是一种有效的java语言功能。在某些情况下,您可能希望做到这一点。什么?

可能有一天,一些程序员希望IDE在写i = 10(而不是i == 10)时警告他

幸运的是,这是 human 接管机器的地方,我们都有工作:)

可悲的是,有太多的错误系统:(

我相信,随着时间的推移,你将养成使用equals() for String

的习惯