重写equals

</pre><span style="font-size:18px;">1、equals方法和==</span><p></p><p><span style="font-size:18px;"><span style="white-space:pre"></span>对于基础类型而言,“==”比较的是基础类型的值。对于对象而言,“==”比较的是引用,即对象的内存地址</span></p><p><span style="font-size:18px;"><span style="white-space:pre"></span>equals()方法在Object基类中,其内部使用“==”实现的</span></p><pre name="code" class="java"><span style="font-size:18px;"><strong>public boolean equals(Object obj)

     return this == obj;
}</strong></span>

 
如果希望不同内存但内容相同烦人两个对象equals时返回true,则我们需要重写Object提供的equals方法 

<strong>/*
		测试重写equals
*/

<span style="font-size:18px;">class Person
{
	private String name;
	private String idStr;
	public Person(){}
	public Person(String name, String idStr)
	{
		this.name = name;
		this.idStr = idStr;
	}
	public String getIdStr()
	{
		return this.idStr;
	}
	public String getName()
	{
		return this.name;
	}
	public boolean equals(Object obj)
	{
		if (this == obj)
		{
			return true;
		}
		if (obj != null && obj.getClass() == Person.class)
		{
			Person personobj = (Person)obj;
			if (this.getIdStr() == personobj.getIdStr() && this.getName() == personobj.getName())
			{
				return true;
			}
		}
		return false;
	}
}

public class TestEquals
{
	public static void main(String[] args)
	{
		Person p1 = new Person("孙悟空", "111");
		Person p2 = new Person("孙悟空", "111");
		Person p3 = new Person("孙悟空", "222");
		System.out.println(p1.equals(p2));
	}
}</span></strong>




<strong><em>	public boolean equals(Object obj)
	{
		if (this == obj)
		{
			return true;
		}
		if (obj != null && obj.getClass() == Person.class)
		{
			Person personobj = (Person)obj;
			if (this.getIdStr() == personobj.getIdStr() && this.getName() == personobj.getName())
			{
				return true;
			}
		}
		return false;
	}</em></strong>
</pre><pre name="code" class="java" style="font-size: 18px;">
什么时候需要重写equals
第一种情况:如果类中提供的equals方法无法满足要求
第二种方法:对于采用Hash算法的集合(HashMap, HashSet, Hashtable)集合中对象必须重写hashcode方法,
同时也重写equals方法
</pre><pre name="code" class="java" style="font-size: 18px;">3、为什么不用instaanceOf运算
重写equals()要求通常两个对象时同一个类的实例,因此使用instaanceof运算符不太合适

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值