java的equals怎么用

描述

Java的equals()方法是Object类中的方法,用于比较对象的内容是否相等。在默认情况下,equals()方法比较的是对象的引用,即判断两个对象是否是同一个实例。但是在很多情况下,我们希望比较的是对象的属性是否相等,这就需要重写equals()方法。

在Java中,equals()方法的默认实现如下:

public boolean equals(Object obj) {
return (this == obj);
}

上述代码中,equals()方法将当前对象和传入的对象进行引用比较,如果两个对象的引用相同,则返回true,否则返回false。但是这种引用比较并不满足我们的实际需求,因为我们更关心对象的属性是否相等。

下面是重写equals()方法的一般步骤:

  1. 首先,需要判断传入的对象是不是当前类的实例,否则直接返回false。
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
// ...
}
  1. 然后,将传入的对象转为当前类的实例。
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}

MyClass myObj = (MyClass) obj;
// ...
}
  1. 接下来,比较两个对象的属性是否相等。这里需要根据具体情况来判断哪些属性应该被比较。
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}

MyClass myObj = (MyClass) obj;

// 比较属性是否相等
if (this.field1 != myObj.field1) {
return false;
}
if (!this.field2.equals(myObj.field2)) {
return false;
}
// ...

return true;
}

在上述代码中,我们比较了两个对象的field1和field2属性是否相等,如果不相等则返回false。

  1. 最后,要确保equals()方法满足以下特性:
  • 自反性:对于任何非null的引用值x,x.equals(x)应该返回true。
  • 对称性:对于任何非null的引用值x和y,如果x.equals(y)返回true,则y.equals(x)也应该返回true。
  • 传递性:对于任何非null的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也应该返回true。
  • 一致性:对于任何非null的引用值x和y,如果对象中的属性没有发生变化,那么多次调用x.equals(y)应该返回相同的结果。
  • 对于任何非null的引用值x,x.equals(null)应该返回false。

综上所述,重写equals()方法时需要按照上述步骤来进行,确保比较的是对象的属性相等性,并满足equals()方法的特性。这样,我们就可以根据自己的需求来定义两个对象是否相等了。

public class MyClass {
private int field1;
private String field2;

// 构造方法、Getter和Setter方法等...

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

MyClass myObj = (MyClass) obj;

// 比较属性是否相等
if (this.field1 != myObj.field1) {
return false;
}
if (!this.field2.equals(myObj.field2)) {
return false;
}

return true;
}

// ...
}

这样,我们就可以根据重写后的equals()方法来判断两个对象是否相等了。

MyClass obj1 = new MyClass(1, "hello");
MyClass obj2 = new MyClass(1, "hello");

System.out.println(obj1.equals(obj2)); // 输出:true

需要注意的是,当我们重写equals()方法时,通常也需要重写hashCode()方法。因为根据Java规范,如果两个对象通过equals()方法相等,那么它们的hashCode()方法的返回值也应该相等。否则,它们的行为在使用基于散列的集合类(例如HashMap、HashSet等)时可能是不正确的。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分