代码:
call.getUserId().equals(ITConstants.SPECIALID)
public static final Integer SPECIALID= 0;
POJO:
public class ImCall implements java.io.Serializable {
private Integer userId;
HBM:
<property name="userId">
<column name="USER_ID" />
</property>
MySQL的:
int(11) is the datatype in MySQL
当UserId为零时“.equals()”不起作用(返回false)但令人惊讶的是“==”工作(返回true)。 我以为是因为Tomcat Server中的一些问题。所以我清理它并重新启动。 仍然是同一个问题。
但是几天之后,我上面提到的问题再次出现了。 但现在,==和.equals()都有效!
所以,我的第一个问题是,当“==”有效并且“.equals()”没有时,是否存在任何情况。 第二个问题是,为什么“==”在这种情况下返回true?
编辑:
Getters仅返回Integer。
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
答案 0 :(得分:2)
我很确定你的测试肯定有问题。你描述的症状绝不应该发生。
如果==
方法执行不当,equals()
不能成为equals
的唯一方法。对于Integer
,这是一个核心Java类,这是不会发生的。
然而,可能发生的情况是,如果数据类型以不同的格式(例如Float
或Long
)返回,而不是您预期equals()
可能在那里失败。
例如3 == 3L
返回true,但new Integer(3).equals(new Long(3))
返回false。那是因为带有基元的== case允许将整数提升为long来执行比较。
请在此处自行尝试:http://www.tryjava8.com/app/snippets/52b5878ce4b0f5090255bc17
答案 1 :(得分:2)
Tim B 回答了你的第一个问题。我只想为第二个添加答案。
默认情况下,在Java中,有一个整数的缓存,从-128到127 。
因此,即使使用int的object(boxed)表示,==
操作也能正常工作,因为将使用缓存的值而不是object。