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