黑马程序员_复写Object中的equals()方法和“==”的特点

------- android培训java培训、期待与您交流! ----------

先举个例子说明:

class Person
{
	private String name;
	private int age;
	public Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
}
class	ObjectEqualsTest
{
	public static void main(String[] args)
	{
		Person p1 = new Person("lily",20);
		Person p2 = new Person("lily",20);
		//判断p1和p2的内容是否相等
		System.out.println(p1.equals(p2)?"是同一个人!":"不是同一个人");
	}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ObjectEqualsTest.java

C:\Users\lenovo\Desktop>java ObjectEqualsTest
不是同一个人

C:\Users\lenovo\Desktop>

从上面的程序中可以发现,两对象的内容完全相等,但为什么比较的结果是不相等呢?

因为p1与p2的内容分别在不同的内存空间指向了不同的内存地址,所以在用equals()方法比较时,实际上是调用了Object类中的equals()方法,但可以发现此方法并不好用,所以在开发中往往需要复写equals方法,请看下面复写equals()方法后的结果。

示例:

class Person
{
	private String name;
	private int age;
	public Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}

	public boolean equals(Object obj)	//复写Object类中equals()方法
	{
		if(obj instanceof Person)
		{
			Person p = (Person)obj;
			if(this.name.equals(p.name) && this.age==p.age)
				return true;
		}
		else
			return false;
		return false;
	}
}

class	ObjectEqualsTest
{
	public static void main(String[] args)
	{
		Person p1 = new Person("lily",20);
		Person p2 = new Person("lily",20);
		//判断p1和p2的内容是否相等
		System.out.println(p1.equals(p2)?"是同一个人!":"不是同一个人");
	}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ObjectEqualsTest.java

C:\Users\lenovo\Desktop>java ObjectEqualsTest
是同一个人!

C:\Users\lenovo\Desktop>

总结:

通过了上面的实例,证明了复写Object类中equals()方法可以提高程序的健壮性,让程序的功能更完整,所以开发中往往都要复写Object类中equals()方法。

"=="的特点:

用上面示例说明:

class Person
{
	private String name;
	private int age;
	public Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}

	public boolean equals(Object obj)	//复写Object类中equals()方法
	{
		if(obj instanceof Person)
		{
			Person p = (Person)obj;
			if(this.name.equals(p.name) && this.age==p.age)
				return true;
		}
		else
			return false;
		return false;
	}

	public boolean compareAge(Object obj)	//使用"=="比较年龄
	{
		if(obj instanceof Person)
		{
			Person p = (Person)obj;

			return this.age == p.age;
		}
		return false;
	}
}

class	ObjectEqualsTest
{
	public static void main(String[] args)
	{
		Person p1 = new Person("lily",20);
		Person p2 = new Person("lily",20);
		//判断p1和p2的内容是否相等
		System.out.println(p1.equals(p2)?"是同一个人":"不是同一个人");
		System.out.println(p1==p2?"内存地址值相等":"内存地址值不等");
		boolean bool = p1.compareAge(p2);
		System.out.println(bool?"年龄相等":"年龄不相等");
	}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ObjectEqualsTest.java

C:\Users\lenovo\Desktop>java ObjectEqualsTest
是同一个人
内存地址值不等
年龄相等

C:\Users\lenovo\Desktop>

 总结:

从上面的例子可以看出,"=="是比较内存地址值,通过复写Object类中equals()方法比较内容是否相等,什么时候用"=="方法或equals()方法看需求而定。

------- android培训java培训、期待与您交流! ----------

详细请登录:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值