如果要比较两个对象是否相等,需要依次比较两个对象中的每一个属性的内容.范例如下:
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("不是同一个对象.") ;
}
}
}运行结果:
本文详细阐述了如何在Java中实现对象之间的比较操作,并提出了改进方法,使比较操作成为对象自身的功能,避免了主类不必要的判断,提高了代码的效率与可读性。
2379

被折叠的 条评论
为什么被折叠?



