首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.equals()和==在(==工作了,但.equals没有!)

.equals()和==在(==工作了,但.equals没有!)
EN

Stack Overflow用户
提问于 2013-12-21 11:39:56
回答 2查看 158关注 0票数 1

代码:

代码语言:javascript
复制
call.getUserId().equals(ITConstants.SPECIALID)

public static final Integer SPECIALID= 0;

波霍:

代码语言:javascript
复制
public class ImCall implements java.io.Serializable {
private Integer userId;

HBM:

代码语言:javascript
复制
<property name="userId">
  <column name="USER_ID" />
</property>

MySQL:

代码语言:javascript
复制
int(11) is the datatype in MySQL

当UserId为零时,".equals()“不起作用(返回false),但令人惊讶的是,"==”有效(返回为真)。我以为是因为Tomcat Server.So的一些问题,所以我清理了它,然后重新启动。还是同样的问题。

但是再过几天,我上面提到的问题就没有再发生了。但是现在,==和.equals()都起作用了!

因此,我的第一个问题是,是否存在"==“有效而".equals()”不工作的情况。第二个问题是,为什么"==“在这种情况下返回true?

编辑:

Getter只返回整数。

代码语言:javascript
复制
public Integer getUserId() {
    return userId;
}

public void setUserId(Integer userId) {
    this.userId = userId;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-21 12:15:44

我敢肯定你的考试肯定出了什么问题。你描述的症状不应该发生。

==不成为equals()的唯一方法是如果您的equals方法有一个糟糕的实现。对于Integer,它是一个核心Java类,这是不可能发生的。

但是,如果数据类型以不同的格式返回(例如,FloatLong ),则可能会发生与您预期的不同的情况,equals()可能会在那里失败。

例如,3 == 3L返回true,而new Integer(3).equals(new Long(3))返回false。这是因为允许带有原语的==情况将整数提升为long以执行比较。

你自己试试吧:http://www.tryjava8.com/app/snippets/52b5878ce4b0f5090255bc17

票数 2
EN

Stack Overflow用户

发布于 2013-12-21 12:39:32

蒂姆B回答了你的第一个问题。我只想补充第二个问题的答案。

默认情况下,在Java中,整数在-128到127之间有一个缓存。

因此,即使您使用int的对象(装箱)表示,==操作也将正确工作,因为缓存的值将被使用而不是对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20718592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档