標籤:
第三個代碼模型:對象比較
在講解具體的概念之前,再來觀察一種引用傳遞的形式,本類接收本類對象。
範例:觀察程式碼(暫時不要去思考代碼意義)
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學習-第三個代碼模型