比较两个对象是否相等,需要依次比较两个对象中的每一个属性的内容,我们可以采用下面的两种实现形式:
第一种形式。
package com.test8;
public class Test1 {
public static void main(String[] args) {
Person per1=new Person("吴邪", 28);
Person per2=new Person("三叔", 40);
if(per1.getName().equals(per2.getName())&&per1.getAge()==per2.getAge()){
System.out.println("是同一个对象");
}else{
System.out.println("不是同一个对象");
}
}
}
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
上述程序虽说达到了我们的目的,但是代码进行比较的过程中采用了客户端(第三方,主方法或者说主类可以理解为客户端)来完成判断,是不合适的,因为这种比较应该是每一个对象具备的功能,应该由本类完成。
下面我们就按照这样的思路完成第二种样式的代码
package com.test8;
public class SecondIdea {
public static void main(String[] args) {
Sheep per1=new Sheep("多利", 8);
Sheep per2=new Sheep("多利", 8);
if(per1.compare(per2)){
System.out.println("是同一个对象");
}else{
System.out.println("不是同一个对象");
}
}
}
class Sheep {
private String name;
private int age;
public Sheep(String name,int age){
this.age=age;
this.name=name;
}
//在Person对象中创建一个类
//一个类可以接受本类引用,接收完成后可以直接调用本类中的私有操作(注意“引用”这个词)
public boolean compare(Sheep per){//定义了compare()方法,功能是进行比较,
if(per==null){
return false;
}
if(this==per){ //地址相同
return true;
}
//在conpare()方法中有两个对象:传入的Person,另外一个是this
if(this.name.equals(per.name)&&this.age==per.age){
return true;
}
return false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}