如果要比较两个对象是否相等,需要依次比较两个对象中的每一个属性的内容.范例如下:
class Person{
private String name ;
private int age ;
public Person(){}
public Person(String name, int age){
this.name = name ;
this.age = age ;
}
public void setName(String name){
this.name = name ;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
}
public class TestDemo{
public static void main(String args[]){
Person per1 = new Person("张三",20) ;
Person per2 = new Person("张三",20) ;
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 boolean compare(Person per){
if(per == null){ //为避免NullPointerException的产生,增加一个null的判断
return false ;
}
if(this == per){ //为了防止浪费性能的情况出现(要判断的属性较多),使用地址判断,因为相同的对象地址相同
return true ;
}//compare()方法中有两个对象:传入的Person,另外一个是this,进行属性的依次比较
if(this.name.equals(per.name) && this.age == per.age){
return true ;
}
return false ;
}
public void setName(String name){
this.name = name ;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
}
public class TestDemo{
public static void main(String args[]){
Person per1 = new Person("张三",20) ;
Person per2 = new Person("张三",20) ;
if(per1.compare(per2)){
System.out.println("是同一个对象.");
}
else{
System.out.println("不是同一个对象.") ;
}
}
}
运行结果: