gpt4 book ai didi

java - 为什么这个 String.equals() 方法总是返回 false?

转载 作者:行者123 更新时间:2023-12-02 08:18:13 29 4
gpt4 key购买 nike

我有一个类,我使用 Eclipse 方法生成器为其实现了自定义 hashCode() 和 equals(Object) 方法。该类的每个对象都有一个名为 mUid 的 String 字段。它应该是唯一的并且足以确定平等。重写的方法如下所示:

    @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((mUid == null) ? 0 : mUid.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
DataSource other = (DataSource) obj;
if (mUid == null) {
if (other.mUid != null)
return false;
} else if (!mUid.equals(other.mUid))
return false;
return true;
}

但由于某种原因,当我比较类的两个对象时,它总是返回 false。我已经使用调试器单步调试了代​​码,可以确定 mUid 字符串是相同的。但我的equals(Object)方法总是在行处返回 false

if (!mUid.equals(other.mUid)) {return false;}

这意味着 String equals() 方法表明字符串不相等。但是,在调试器中我可以看到甚至它们的哈希码是相等的。

这是一个调试屏幕截图: Debugging screenshot谁能解释一下发生了什么事吗?谢谢。

更新:它有效!

我应该指出,我不是直接调用 equals(...) 方法,而是从 List<DataSource> list.contains(DataSource) 调用 equals(...) 方法。 。事实证明,如果我单步执行equals(Object)代码中,它向我显示它在比较列表中的每个对象时返回 false(即使存在匹配)。但似乎List.contains()无论如何,方法都会返回正确的值(true 或 false)。不知道为什么会这样,但它确实有效。我在 if(list.contains(dataSource)); 之后多了一个分号所以我无法正确地看到 contains()工作正常。 感谢大家的帮助

最佳答案

你的方法应该有效。我刚刚用这段代码进行了测试,它工作得很好:

public class DataSource {

private String mUid;

public DataSource(String m) {
mUid = m;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((mUid == null) ? 0 : mUid.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
DataSource other = (DataSource) obj;
if (mUid == null) {
if (other.mUid != null)
return false;
} else if (!mUid.equals(other.mUid))
return false;
return true;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DataSource ds1 = new DataSource("test");
DataSource ds2 = new DataSource("test");
System.out.println(ds1.equals(ds2));
}

}

控制台输出为“true”;当我将代码更改为 DataSource ds2 = new DataSource("test1"); 它返回“false”;

关于java - 为什么这个 String.equals() 方法总是返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961067/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com