标签:
第三个代码模型:对象比较
在讲解具体的概念之前,再来观察一种引用传递的形式,本类接收本类对象。
范例:观察程序代码(暂时不要去思考代码意义)
class Person { private String name ; public Person(String name) { this.name = name ; } // 接收本类对象 public void change(Person temp) { temp.name = "李四" ; // 直接通过“对象.属性”调用 } public String getName() { return this.name ; } } public class TestDemo { public static void main(String args[]) { Person per = new Person("张三") ; System.out.println(per.getName()) ; per.change(per) ; // 接收本类,不关心意义,只关心语法 System.out.println(per.getName()) ; } } |
正常情况下如果使用了private封装,那么外部是无法通过“对象.属性”的形式进行操作的,但是如果说现在把对象传递回了类之中。
那么如果说现在有两个Person类对象(name、age属性),那么如果要比较两个对象是否相等,该怎么做?将每一个属性分别进行比较,如果全都相同,则表示相等,于是现在就得出了以下的一段代码。
class Person { private String name ; private int age ; public Person() {} public Person(String name,int age) { this.name = name ; 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 perA = new Person("张三",20) ; Person perB = new Person("张三",20) ; if (perA.getName().equals(perB.getName()) && perA.getAge() == perB.getAge()) { System.out.println("两个对象相等。") ; } else { System.out.println("两个对象不等。") ; } } } |
此时已经可以成功的进行了对象比较操作,但是这种代码有问题。
此时的代码所有的验证功能都交给主方法去完成,实际上主方法就是一个客户端,在主方法之中不应该牵扯到过多的业务逻辑,只需要进行简单的操作即可。另外,信息的比较过程,应该是每个对象都具备的功能。应该是在类之中定义好的。
class Person { private String name ; private int age ; public Person() {} public Person(String name,int age) { this.name = name ; this.age = age ; } public String getName() { return this.name ; } public int getAge() { return this.age ; } // 暂定此方法名称为compare() // 此方法会具备两个对象:当前对象this、传入的person public boolean compare(Person person) { if (this == person) { // 地址相同 return true ; } if (person == null) { return false ; } // 当对象传回到类之中的时候可以直接利用“对象.属性”访问 if (this.name.equals(person.name) && this.age == person.age) { return true ; } return false ; } } public class TestDemo { public static void main(String args[]) { Person perA = new Person("张三",20) ; Person perB = new Person("张三",20) ; if (perA.compare(null)) { System.out.println("两个对象相等。") ; } else { System.out.println("两个对象不等。") ; } } } |
从标准来讲,简单Java类之中是需要提供有对象比较操作的,回去自己写几个。
标签:
原文地址:http://www.cnblogs.com/kvikon/p/4659930.html