代码:
call.getUserId().equals(ITConstants.SPECIALID)
public static final Integer SPECIALID= 0;波霍:
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),但令人惊讶的是,"==”有效(返回为真)。我以为是因为Tomcat Server.So的一些问题,所以我清理了它,然后重新启动。还是同样的问题。
但是再过几天,我上面提到的问题就没有再发生了。但是现在,==和.equals()都起作用了!
因此,我的第一个问题是,是否存在"==“有效而".equals()”不工作的情况。第二个问题是,为什么"==“在这种情况下返回true?
编辑:
Getter只返回整数。
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}发布于 2013-12-21 12:15:44
我敢肯定你的考试肯定出了什么问题。你描述的症状不应该发生。
==不成为equals()的唯一方法是如果您的equals方法有一个糟糕的实现。对于Integer,它是一个核心Java类,这是不可能发生的。
但是,如果数据类型以不同的格式返回(例如,Float或Long ),则可能会发生与您预期的不同的情况,equals()可能会在那里失败。
例如,3 == 3L返回true,而new Integer(3).equals(new Long(3))返回false。这是因为允许带有原语的==情况将整数提升为long以执行比较。
你自己试试吧:http://www.tryjava8.com/app/snippets/52b5878ce4b0f5090255bc17
发布于 2013-12-21 12:39:32
蒂姆B回答了你的第一个问题。我只想补充第二个问题的答案。
默认情况下,在Java中,整数在-128到127之间有一个缓存。
因此,即使您使用int的对象(装箱)表示,==操作也将正确工作,因为缓存的值将被使用而不是对象。
https://stackoverflow.com/questions/20718592
复制相似问题