java面向对象(七) 对象比较

来源:互联网 发布:电脑连接多重网络 编辑:程序博客网 时间:2024/06/06 20:37

如果要比较两个对象是否相等,需要依次比较两个对象中的每一个属性的内容.范例如下:

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("不是同一个对象.") ;}}}
运行结果:



0 0
原创粉丝点击