Java FindBugs:Long引用的可疑比较

Ano*_*ose 3 java findbugs

FindBugs在我的代码中识别出以下错误:

Long引用的可疑比较

我试过谷歌搜索这个特殊的错误,但没有运气.据我所知,比较数据类型的字段Long应该由==运营商完成.

if (materialDefinition.getId() == definitionToRemoveFromClass.getId()) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

我确定这两种方法都会.getId()返回Long.

这真的是一个问题,如果是这样,我该如何解决?

ars*_*jii 12

这真的是一个问题,如果是这样,我该如何解决?

是的,您要比较引用而不是值,因此Long具有相同值的两个不同实例将导致该比较false.您应该使用Long#equals():

final Long id1 = materialDefinition.getId();
final Long id2 = definitionToRemoveFromClass.getId();

if (id1.equals(id2)) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

如果getId()可以返回null,那么还要确保包括相应的null检查(虽然getId()听起来不像应该返回的方法null).