San*_*tha 5 java string equals
public class Account {
String account;
double balance;
Account(String account, double balance) {
this.account = account;
this.balance = balance;
}
}
public class AccountTest {
public static void main(String[] args) {
Account a1 = new Account("Sandy", 1000);
Account a2 = new Account("Sandy", 1000);
System.out.println(a1.equals(a2));
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行它显示"false"但对象包含变量中的相同数据时.解释.
因为默认情况下 object 根据equals(Object obj)检查相等性。
Object 类的 equals 方法实现了对象上最有区别的可能等价关系;也就是说,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象(x == y 的值为 true)时,此方法才返回 true。
如果要检查equals()类中的方法是否相等,则必须覆盖类的 equals() 方法Object。
how-to-override-equals-method-in-java,如下所示:
@Override
public boolean equals(Object obj) {
// your implementation
}
Run Code Online (Sandbox Code Playgroud)
并且您应该始终覆盖 hashCode() 每当覆盖Object类的equals方法时。
#Effective Java,作者 Joshua Bloch
您必须在每个覆盖 equals() 的类中覆盖 hashCode()。不这样做将导致违反 Object.hashCode() 的一般契约,这将阻止您的类与所有基于哈希的集合(包括 HashMap、HashSet 和 Hashtable)一起正常运行。
您需要重写 equals() 方法,并在需要比较它们的值时使用它。
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Account other = (Account) obj;
if ((this.account== null) ? (other.account!= null) : !this.account.equals(other.account)) {
return false;
}
if (this.balance!= other.balance) {
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14731 次 |
| 最近记录: |