码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA学习-第三个代码模型

时间:2015-07-19 23:20:35      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

第三个代码模型:对象比较

在讲解具体的概念之前,再来观察一种引用传递的形式,本类接收本类对象。

范例:观察程序代码(暂时不要去思考代码意义)

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类之中是需要提供有对象比较操作的,回去自己写几个。

JAVA学习-第三个代码模型

标签:

原文地址:http://www.cnblogs.com/kvikon/p/4659930.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!