Java对象判等,Object类equals()方法

Java中对象的判等,大家会想到equals()方法

equals

equals()方法的定义:用于测试某个对象是否和另一个对象相等。在Object类(所有类的祖先)中的实现是判断两个对象是否指向同一块内存空间。

很显然,这中方法就好比“==”的作用。在很多时候不能满足我们的要求,如clone出来的对象和原来的对象,就是两个对象指向不同的两块空间,而空间里的内容相等,,很多时候我们需要的是这种相等。。

clone()也是Object的一种方法 ,这里只做简单介绍:

Person p1 = new Person();
p1.setName("SkySong");
Person p2 = (Person)p1.clone();

System.out.printIn(p2.getName());//SkySong
System.out.printIn(p1.equals(p2));//false
System.out.printIn(p1 == p2);//false

想要使用clone()方法要在类中实现 Cloneable 接口,并重写clone()方法

public class Person implements Cloneable{
	@Override
	protected Object clone() throws CloneNotSupportedException{
		return super.clone();
	}

}

当然还有一点要注意,当Person类中的成员是别的类对象时,此时的clone会出一点小问题,这里涉及到深度克隆了,有点跑题了,不会的自行查阅,咱接着说判等!

咳咳…
很显然,原始的equals()方法不能很好的解决问题,,那,我们就重写它!

public boolean equals(Object otherObject){
	//先看看是不是指向同一块地方
	if(this == otherObject){
		return true;
	}
	//若干参数为空(指向null),必须返回false,,Java语言的规定
	if(otherObject == null)
		return false;
	//类不同,对象肯定不同
	if(getClass()!=otherObject.getClass())
		return false;
	//走到这一步,差不多就可以真正地判断一下了
	//这里用之前的Person类为例,判断两个Person对象是否相等
	Person p = (Person)otherObject;
	//判断所有字段是否相等,这里的Person只有name
	if(this.getName().equals(p.getName())){
		return true;
	}	
}

到这就差不多了,,顺便在提一下常量的判等(String就是典型的final对象)
拿String举例,一旦赋值就不可改变。

String s1 = "sky";
String s2 = "sky";
//显然s1 和 s2 指向同一块地方
String ss1 = new String("sky");
String ss2 = new String("sky");
//ss1 和 ss2 到最后也是指向字符串常量池中的存"sky"的那块区域
//但是ss1 和 ss2 会在堆区开辟不同指针域(这次词可能不准确)里面存放着指向"sky"的地址

That’s all,.Thank you!

原创文章 10 获赞 10 访问量 444

猜你喜欢

转载自blog.csdn.net/weixin_43415201/article/details/105046521