天天看點

重寫toString()和equals()方法

package day02.exe;
/**
 * 重寫toString()和equals()方法
 * 一般在自己定義的類中需要重寫這兩個方法.
 * @author Administrator
 *
 */

public class Student {
    private String name;
    private int age;
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    /* 重寫toString()沒有特别的原則
     * 盡量反映對象的屬性.
     * (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    public String toString(){
        return "name:"+name+",age:"+age;
    }
    public boolean equals(Object object){
        if(object==null){
            return false;
        }
        if(this==object){
            return true;
        }
        if(object instanceof Student){
            Student s = (Student)object;
            /*
             * String類中以重寫過equals()方法
             * 這裡可以直接調用String的toString()方法.
             */
            return this.name.equals(s.name) && this.age==s.age;
        }
        return false;
    }
}

package day02.exe;
/**
 * 對重寫的toString()和equals()方法進行測試
 * @author Administrator
 *
 */

public class Exe03 {

    public static void main(String[] args) {
        /*
         * 重寫過的toString()方法可以輸出學生的姓名
         * 和年齡資訊.
         */
        Student s1 = new Student("jack",23);
        Student s2 = new Student("jack",23);
        Student s3 = new Student("rose",22);
        Student s4 = new Student("jack",22);
        Student s5 = new Student("rose",23);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
        System.out.println(s5);
        System.out.println("********************");
        /*
         * 輸出結果如下:
         * name:jack,age:23
         * name:jack,age:23
         * name:rose,age:22
         * name:jack,age:22
         * name:rose,age:23
         * ********************
         * s1==s2:true
         * s1==s3:false
         * s1==s4:false
         * s1==s5:false
         * 隻有當姓名和年齡都相等時才表示
         * 是同一個人(實際上姓名和年齡都
         * 相等也不能保證是同一個人,這裡
         * 隻是為了示範equals()的重寫).
         */
        System.out.println("s1==s2:"+s1.equals(s2));
        System.out.println("s1==s3:"+s1.equals(s3));
        System.out.println("s1==s4:"+s1.equals(s4));
        System.out.println("s1==s5:"+s1.equals(s5));
    }

}