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



我已经尝试了许多方法来比较两串"电话号码",但似乎没有一种通过测试。 我当前使用的代码:

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] 等于方法的签名是public boolean equals(Object other)。您的 equals 方法具有不同的签名,这意味着它是一种完全不同的方法,与真正的 equals 方法没有任何关系。除了巧合的是,它恰好与它共用一个名字。这意味着您的"假"等于方法不会被其他使用等于方法的代码使用。例如数组列表的contains方法。解决方案是使等于方法具有作为参数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方法,或者两者都不重写。

龙目岛项目自动化了所有这些东西,你可能对此感兴趣。

最新更新