28.1 api-- Object(toString equals)

/*
* String toString() : 返回该对象的字符串表示
* return getClass().getName() + "@" + Integer.toHexString(hashCode());
* getClass():返回一个字节码对象
* Integer.toHexString():返回指定参数的十六进制字符串形式
* hashCode():返回该对象的哈希码值(内部地址)
*
* boolean equals(Object obj)
*
* 重建Object的toString方法快捷方式:鼠标右键Generate---toString
* 查看toString源码:ctrl+点击toString
*/

 

public class Object_toString_Demo {
    public static void main(String[] args) {
        day d = new day();
        System.out.println(d);//不写默认执行对象的toString方法
        System.out.println(d.toString());//toString方法对我们没有意义,需要重新方法。
                                         //查看源码:ctrl+点击toString

        Student s = new Student();
        s.name = "aa";
        s.age = 12;
        System.out.println(s);//不写默认执行对象的toString方法
        System.out.println(s.toString());
    }
}

class day {//所有的类都默认继承的Object类,如果继承了指定类就使用其他类(总会有一个父类没有继承,它就继承Object)
    int time;
}

//重建Object的toString方法快捷方式:鼠标右键Generate---toString
class Student extends Object {
    String name;
    int age;

    @Override
    public String toString() {
        return "student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

输出

 

 

二、equals 案例 

/*
* boolean equals(Object obj)
* 使用==来比较两个对象是否相等,则比较地址值是否相等

*

*可以重写equals方法来对比两个对象是否一样(不是比地址值,而是比我们设定的比较姓名、年龄)。

*重建Object的equals方法快捷方式:鼠标右键Generate---equals

*/

public class Object_Equals_Demo {
    public static void main(String[] args) {
        Student2 s = new Student2();
        Student2 s2 = new Student2();
        boolean flag = s.equals(s2);
        System.out.println(s + "| |" + s2 + "| |" + flag);
    }
}

class Student2 {
    String name;
    int age;

}

输出

 

方法重建

package day28_api.object;

import java.util.ArrayList;
import java.util.Objects;

/*
 * boolean equals(Object obj)
 *         使用==来比较两个对象是否相等,则比较地址值是否相等
 *
 *     可以重写equals方法来对比两个对象是否一样(不是比地址值,而是比我们设定的比较姓名、年龄)。
 */
public class Object_Equals_Demo {
    public static void main(String[] args) {
        Student3 s3 = new Student3("aa",12);
        Student3 s4 = new Student3("aa",12);
//        boolean flag2 = s3.equals(new ArrayList<>()); //检查两边类型是否一样(class)
        boolean flag2 = s3.equals(s4);
        System.out.println(s3 + "| |" + s4 + "| |" + flag2);//此时equals方法比较的不是地址值,而是重写的方法(比较姓名、年龄)
    }
}

class Student3 {
    String name;
    int age;

    //有参构造方法
    public Student3(String name,int age) {
        this.name = name;
        this.age = age;
    }

//    @Override
//    public boolean equals(Object o) {
//        Student3 nextstudent = (Student3) o;
//
//        if(!this.name.equals(nextstudent.name)) {
//            return false;
//        }
//
//        if(this.age != nextstudent.age) {
//            return false;
//        }
//        return true;
//    }


    @Override
    public boolean equals(Object o) {
        //提高效率 当前对象和传递进来的对象地址值一样,则不用比较成员
        if (this == o) return true;
        //提高代码的健壮性
        if (o == null || getClass() != o.getClass()) return false;
        //向下转型
        Student3 student3 = (Student3) o;
        //&&两边都成立true,有一边不成立则false
        return age == student3.age &&
                Objects.equals(name, student3.name);

    }

//重写该方法可以让地址也匹配
// @Override
// public int hashCode() {
//
// return Objects.hash(name, age);
// }


}

输出

取消hashcode重新的注释

 

posted @ 2019-07-25 17:09  龙桑  阅读(140)  评论(0编辑  收藏  举报