Java之对象的equals方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_38358499/article/details/100111809

equals方法:

  • boolean equals(Object  obj),使用“程序自己的规则”去判断两个是否相等
  • ==:判断两个基本变量的值是否相等
class Dog
{
	private String DogNo;
	private String DogCol;
	public Dog()
	{}
	public Dog(String DogNo,String DogCol)
	{
		this.DogNo = DogNo;
		this.DogCol = DogCol;
	}
	public boolean equals(Object obj)
	{
		//自己和被比较的对象是同一个实例
		if(this == obj)
		{
			return true;
		}
		//用于获取obj引用对象的类型
		if(obj.getClass() == Dog.class)
		{
			Dog d2 = (Dog)obj;
			if(d2 != null && this.DogNo.equals(d2.DogNo))
			{
				return true;
			}
		}
		return false;
	}
}

public class EqualsTest {
	
	public static void main(String[] args) 
	{
		System.out.println('A' == 65.0);              //true
		
		//当比较基本类型的数值时,程序不管数据类型,只比较实际值的大小
		System.out.println('0' == 0.0);               //false
		
		//当比较引用类型的变量(不包括包装类,因为包装类可以自动拆箱),要求被比较的两个引用变量引用同一个实例时,才会返回true
		EqualsTest q1 = new EqualsTest();     //在内存中开辟空间,最终会被回收
		EqualsTest q2 = new EqualsTest();     //q1和q2是两个new出来的不同对象,对象的地址不同
		System.out.println(q1 == q2);                 //false
		
		String s1 = new String("hello");     //String重写了equals方法
		String s2 = new String("hello");
		System.out.println(s1.equals(s2));    //true
		
		Dog d1 = new Dog();
		System.out.println(d1.equals(q1));      
		System.out.println(d1.equals("dash"));
		
		Dog dog1 = new Dog("1234","灰色");
		Dog dog2 = new Dog("1234","灰色");
		System.out.println(dog1.equals(dog2));	  //true
	}
}
  • 重写equals方法的标准:
  1. 如果当前对象和被比较对象,本身就相等,则返回true;
  2. 要求当前对象与被比较对象的类型相同,关键值属性也相同,则返回true
  • 正常重写equals()方法应该满足的条件:
  1. 自反性:对任意x,x.equals(x)一定返回true;
  2. 对称性:对于任意x和y,如果y.equals(x)返回true,则x.equals(y)也返回true;
  3. 传递性:对于任意x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)一定返回true;
  4. 一致性:对于任意x和y,如果对象中用于等价比较的信息没有改变,那么无论调用多少次x.equals(y),返回结果应该是保持一致的,要么一致true,要么一致false;
  5. 对于任何不适null的x,x.equals(null)

猜你喜欢

转载自blog.csdn.net/qq_38358499/article/details/100111809