Java中的equals

Equals方法:

Object类中的equals方法用于检测一个对象是否等于另外一个对象,在Object类中,这个方法将判断两个对象时都要有相同的引用。但是实际上两个对象的比较是比较两个对象的状态是否相等,及他们的实例域是否相等,比如员工类型的变量的名字,工资,和雇佣日期,如果都一样,则这两个对象认为是相等的,有一项不同,这两个对象认为不是相等的。

Equals()方法实际上的执行语句是判断对象的各个实例变量的值。

Java语言规范要求equals方法具有的特性:

  1. 自反性,对于任何的非空引用x ,x.equals(x)应该返回true;
  2. 对称性:对于任何的非空引用x 和y,x.equals(y)的结果应该和y.equals(x)的结果一致;
  3. 传递性:对于任何的非空引用x 和y和z ,如果x.equals(y)为true,y.equals(z)为true,则x.equals(z)也应该为true;
  4. 一致性:如果x和y引用的对象没有发生变化,反复调用x.equals(y)的结果应该不变。

在比较类是否匹配的时候,不建议使用instanceof来判断,比如:

Employee  继承于Person类,

if(!(Employee  instanceof Person))的结果同if(!(Person  instanceof Person))的结果是一致的。因为子类即超类。

 

对于数组类型的域,可以使用静态的Arrays.equals方法检测相应的对象的数组元素是否相等。

Static Boolean equals(type[] a,type[] b){}

如果两个数字的长度相同,并且在对应的位置上的元素也都相等,将返回true。数组的元素类型可以是8中基本类型和Object类型。

public class Equals {
	
	public static void main(String[] args) {
		Worker w1 = new Worker("小明",22);
		Worker w2 = w1;
		Worker w3 = new Worker("小刚",30);
		Worker w4 = new Worker("小刚",30);
		System.out.println(w1.equals(w2));
		System.out.println(w3.equals(w4));
	}
}
结果:
true
false

第一种:对象是引用类型,w1和w2指向的是同一块空间,所以返回值为true,但是w3和w4是分别开辟了内存空间,虽然它们的实例域的值是相同的,返回值是false。

这里说明的是,在标准java库包含有150多个equals方法的实现,都是对Object的equal方法进行重写,当然,我们也可以根据自己的程序需要,对equals进行重写,也可以定义自己的比较方法。

猜你喜欢

转载自blog.csdn.net/ibliplus/article/details/81147481
今日推荐