gpt4 book ai didi

java - 尝试使用 Java 中的 equals() 比较两个字符串

转载 作者:行者123 更新时间:2023-12-02 00:13:01 25 4
gpt4 key购买 nike

我尝试了多种方法来比较两个“电话号码”字符串,但似乎都没有通过测试。我当前使用的代码:

public boolean equals (PhoneNumber other) {     
boolean results = other.equals(digits);
return results;
}

我试图在不进行硬编码的情况下通过测试:

p = new PhoneNumber("5551212");
p2 = new PhoneNumber("5551212", "Home");
displayResults(p.equals(p2));
p.setDigits("1234123");
displayResults(p.equals(p2) == false);

最佳答案

两个独立的问题:

[1]数字是一个字符串;另一个是电话号码。这些永远不会相等。您可能正在寻找的是 other.digits.equals(this.digits)。现在我们将电话号码 A 的数字与电话号码 B 的数字进行比较:苹果和苹果。这有机会解决。

[2] equals 方法的签名是 public boolean equals(Object other)。您的 equals 方法具有不同的签名,这意味着它是一个完全不同的方法,与真正的 equals 方法没有任何关系......除了巧合的是它恰好与它共享一个名称。这意味着您的“假” equals 方法不会被使用 equals 方法的其他代码使用。例如,数组列表的 contains 方法。解决方案是使 equals 方法将 Object other 作为参数。

[3] 当您这样做时,您将无法在 other 上调用 .digits;毕竟,只有电话号码才有数字;任何随机对象都不能保证。解决方案是强制转换 other,但只有在检查它是否是电话号码后才执行此操作:

public boolean equals(PhoneNumber other) {
if (!(other instanceof PhoneNumber)) {
// somebody is comparing apples to oranges. Obviously, then...
return false;
}
return ((PhoneNumber) other).digits.equals(this.digits);
}

另请注意,为了在 HashSet 中正确操作此类对象,您必须始终覆盖 hashCodeequals方法,或两者​​都不。

Project Lombok自动化所有这些东西,您可能对此感兴趣。

关于java - 尝试使用 Java 中的 equals() 比较两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58108398/

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